Skip to content

Commit

Permalink
Merge pull request #38 from fenix-hub/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
fenix-hub authored Nov 6, 2021
2 parents b6ba1e7 + 020ac45 commit 04c3759
Show file tree
Hide file tree
Showing 18 changed files with 1,085 additions and 1,119 deletions.
386 changes: 193 additions & 193 deletions addons/supabase/Auth/auth.gd

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions addons/supabase/Auth/auth_error.gd
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ var type : String = "(undefined)"
var description : String = "(undefined)"

func _init(dictionary : Dictionary = {}) -> void:
_error = dictionary
if not _error.empty():
type = _error.get("error", "(undefined)")
description = _error.get("error_description", "(undefined)")
if _error.has("code"):
type = str(_error.get("code", -1))
description = _error.get("msg", "(undefined)")
# different body for same api source ???
_error = dictionary
if not _error.empty():
type = _error.get("error", "(undefined)")
description = _error.get("error_description", "(undefined)")
if _error.has("code"):
type = str(_error.get("code", -1))
description = _error.get("msg", "(undefined)")
# different body for same api source ???

func _to_string():
return "%s >> %s" % [type, description]
return "%s >> %s" % [type, description]
100 changes: 50 additions & 50 deletions addons/supabase/Auth/auth_task.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@ extends Reference
signal completed(task)

enum Task {
NONE,
SIGNUP,
SIGNUPPHONEPASSWORD,
SIGNIN,
SIGNINANONYM,
SIGNINOTP,
MAGICLINK,
LOGOUT,
USER,
UPDATE,
RECOVER,
REFRESH,
INVITE,
VERIFYOTP
NONE,
SIGNUP,
SIGNUPPHONEPASSWORD,
SIGNIN,
SIGNINANONYM,
SIGNINOTP,
MAGICLINK,
LOGOUT,
USER,
UPDATE,
RECOVER,
REFRESH,
INVITE,
VERIFYOTP
}

var _code : int
Expand All @@ -35,49 +35,49 @@ var data : Dictionary
var _handler : HTTPRequest

func _init(code : int, endpoint : String, headers : PoolStringArray, payload : Dictionary = {}):
_code = code
_endpoint = endpoint
_headers = headers
_payload = payload
_method = match_code(code)
_code = code
_endpoint = endpoint
_headers = headers
_payload = payload
_method = match_code(code)

func match_code(code : int) -> int:
match code:
Task.SIGNIN, Task.SIGNUP, Task.LOGOUT, Task.MAGICLINK, Task.RECOVER, Task.REFRESH, Task.INVITE:
return HTTPClient.METHOD_POST
Task.UPDATE:
return HTTPClient.METHOD_PUT
_, Task.USER:
return HTTPClient.METHOD_GET
match code:
Task.SIGNIN, Task.SIGNUP, Task.LOGOUT, Task.MAGICLINK, Task.RECOVER, Task.REFRESH, Task.INVITE:
return HTTPClient.METHOD_POST
Task.UPDATE:
return HTTPClient.METHOD_PUT
_, Task.USER:
return HTTPClient.METHOD_GET

func push_request(httprequest : HTTPRequest) -> void:
_handler = httprequest
_handler.connect("request_completed", self, "_on_task_completed")
_handler.request(_endpoint, _headers, true, _method, to_json(_payload))
yield(_handler, "request_completed")
_handler = httprequest
_handler.connect("request_completed", self, "_on_task_completed")
_handler.request(_endpoint, _headers, true, _method, to_json(_payload))
yield(_handler, "request_completed")


func _on_task_completed(result : int, response_code : int, headers : PoolStringArray, body : PoolByteArray) -> void:
var result_body : Dictionary = JSON.parse(body.get_string_from_utf8()).result if body.get_string_from_utf8() else {}
match response_code:
200:
match _code:
Task.SIGNUP, Task.SIGNIN, Task.UPDATE, Task.REFRESH:
complete(SupabaseUser.new(result_body), result_body)
Task.MAGICLINK, Task.RECOVER, Task.INVITE:
complete()
0, 204:
match _code:
Task.LOGOUT, Task.USER:
complete()
_:
if result_body == null : result_body = {}
complete(null, {}, SupabaseAuthError.new(result_body))
var result_body : Dictionary = JSON.parse(body.get_string_from_utf8()).result if body.get_string_from_utf8() else {}
match response_code:
200:
match _code:
Task.SIGNUP, Task.SIGNIN, Task.UPDATE, Task.REFRESH:
complete(SupabaseUser.new(result_body), result_body)
Task.MAGICLINK, Task.RECOVER, Task.INVITE:
complete()
0, 204:
match _code:
Task.LOGOUT, Task.USER:
complete()
_:
if result_body == null : result_body = {}
complete(null, {}, SupabaseAuthError.new(result_body))

func complete(_user : SupabaseUser = null, _data : Dictionary = {}, _error : SupabaseAuthError = null) -> void:
user = _user
data = _data
error = _error
emit_signal("completed", self)
user = _user
data = _data
error = _error
emit_signal("completed", self)

42 changes: 21 additions & 21 deletions addons/supabase/Auth/user.gd
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,26 @@ var role : String
var confirmation_sent_at : String

func _init(user_dictionary : Dictionary) -> void:
if user_dictionary.has("user"):
access_token = user_dictionary.get("access_token", "")
token_type = user_dictionary.get("token_type", "")
refresh_token = user_dictionary.get("refresh_token", "")
expires_in = user_dictionary.get("expires_in", 0.0)
dict = user_dictionary.get("user", {})
last_sign_in_at = dict.get("last_sign_in_at", "")
else:
dict = user_dictionary
confirmation_sent_at = dict.get("confirmation_sent_at", "")
email = dict.get("email", "")
id = dict.get("id", "")
created_at = dict.get("created_at", "")
updated_at = dict.get("updated_at", "")
user_metadata = ({} if dict.get("user_metadata") == null else dict.get("user_metadata"))
role = dict.get("role", "")
if user_dictionary.has("user"):
access_token = user_dictionary.get("access_token", "")
token_type = user_dictionary.get("token_type", "")
refresh_token = user_dictionary.get("refresh_token", "")
expires_in = user_dictionary.get("expires_in", 0.0)
dict = user_dictionary.get("user", {})
last_sign_in_at = dict.get("last_sign_in_at", "")
else:
dict = user_dictionary
confirmation_sent_at = dict.get("confirmation_sent_at", "")
email = dict.get("email", "")
id = dict.get("id", "")
created_at = dict.get("created_at", "")
updated_at = dict.get("updated_at", "")
user_metadata = ({} if dict.get("user_metadata") == null else dict.get("user_metadata"))
role = dict.get("role", "")

func _to_string():
var to_string : String = "%-10s %s\n" % ["USER ID:", id]
to_string += "%-10s %s\n" % ["EMAIL:", email]
to_string += "%-10s %s\n" % ["ROLE:", role]
return to_string
var to_string : String = "%-10s %s\n" % ["USER ID:", id]
to_string += "%-10s %s\n" % ["EMAIL:", email]
to_string += "%-10s %s\n" % ["ROLE:", role]
return to_string
84 changes: 42 additions & 42 deletions addons/supabase/Database/database.gd
Original file line number Diff line number Diff line change
Expand Up @@ -17,57 +17,57 @@ var _bearer : PoolStringArray = ["Authorization: Bearer %s"]
var _pooled_tasks : Array = []

func _init(conf : Dictionary, head : PoolStringArray) -> void:
_config = conf
_header += head
name = "Database"
_config = conf
_header += head
name = "Database"


# Issue a query on your database
func query(supabase_query : SupabaseQuery) -> DatabaseTask:
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + supabase_query.build_query()
var task : DatabaseTask = DatabaseTask.new()
task._setup(
supabase_query,
supabase_query.request,
endpoint,
_header + _bearer + supabase_query.header,
supabase_query.body)
_process_task(task)
return task
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + supabase_query.build_query()
var task : DatabaseTask = DatabaseTask.new()
task._setup(
supabase_query,
supabase_query.request,
endpoint,
_header + _bearer + supabase_query.header,
supabase_query.body)
_process_task(task)
return task

# Issue an rpc() call to a function
func rpc(function_name : String, arguments : Dictionary = {}, supabase_query : SupabaseQuery = null) -> DatabaseTask:
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "rpc/{function}".format({function = function_name}) + (supabase_query.build_query() if supabase_query!=null else "")
var task : DatabaseTask = DatabaseTask.new()
task._setup(
supabase_query,
-2,
endpoint,
_header + _bearer,
to_json(arguments))
_process_task(task)
return task
_bearer = get_parent().auth._bearer
var endpoint : String = _config.supabaseUrl + _rest_endpoint + "rpc/{function}".format({function = function_name}) + (supabase_query.build_query() if supabase_query!=null else "")
var task : DatabaseTask = DatabaseTask.new()
task._setup(
supabase_query,
-2,
endpoint,
_header + _bearer,
to_json(arguments))
_process_task(task)
return task

func _process_task(task : DatabaseTask) -> void:
var httprequest : HTTPRequest = HTTPRequest.new()
add_child(httprequest)
task.connect("completed", self, "_on_task_completed")
task.push_request(httprequest)
_pooled_tasks.append(task)
var httprequest : HTTPRequest = HTTPRequest.new()
add_child(httprequest)
task.connect("completed", self, "_on_task_completed")
task.push_request(httprequest)
_pooled_tasks.append(task)

# .............. HTTPRequest completed
func _on_task_completed(task : DatabaseTask) -> void:
if task._handler != null: task._handler.queue_free()
if task.data!=null and not task.data.empty():
match task._code:
SupabaseQuery.REQUESTS.SELECT: emit_signal("selected", task.data)
SupabaseQuery.REQUESTS.INSERT: emit_signal("inserted", task.data)
SupabaseQuery.REQUESTS.UPDATE: emit_signal("updated", task.data)
SupabaseQuery.REQUESTS.DELETE: emit_signal("deleted", task.data)
_:
emit_signal("rpc_completed", task.data)
elif task.error != null:
emit_signal("error", task.error)
_pooled_tasks.erase(task)
if task._handler != null: task._handler.queue_free()
if task.data!=null and not task.data.empty():
match task._code:
SupabaseQuery.REQUESTS.SELECT: emit_signal("selected", task.data)
SupabaseQuery.REQUESTS.INSERT: emit_signal("inserted", task.data)
SupabaseQuery.REQUESTS.UPDATE: emit_signal("updated", task.data)
SupabaseQuery.REQUESTS.DELETE: emit_signal("deleted", task.data)
_:
emit_signal("rpc_completed", task.data)
elif task.error != null:
emit_signal("error", task.error)
_pooled_tasks.erase(task)
14 changes: 7 additions & 7 deletions addons/supabase/Database/database_error.gd
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ var hint : String = "empty"
var details

func _init(dictionary : Dictionary = {}) -> void:
_error = dictionary
if not _error.empty():
code = _error.code if _error.has("code") else "empty"
message = _error.message
hint = _error.hint if _error.has("hint") and _error.hint != null else "empty"
details = _error.get("details", "")
_error = dictionary
if not _error.empty():
code = _error.code if _error.has("code") else "empty"
message = _error.message
hint = _error.hint if _error.has("hint") and _error.hint != null else "empty"
details = _error.get("details", "")
### always different behavior ???

func _to_string():
return "%s >> %s: %s (%s)" % [code, message, details, hint]
return "%s >> %s: %s (%s)" % [code, message, details, hint]
56 changes: 28 additions & 28 deletions addons/supabase/Database/database_task.gd
Original file line number Diff line number Diff line change
Expand Up @@ -18,42 +18,42 @@ var error : SupabaseDatabaseError
var _handler : HTTPRequest

func _init(data = null, error : SupabaseDatabaseError = null) -> void:
self.data = data
self.error = error
self.data = data
self.error = error

func _setup(query : SupabaseQuery, code : int, endpoint : String, headers : PoolStringArray, payload : String = ""):
_query = query
_code = code
_endpoint = endpoint
_headers = headers
_payload = payload
_method = match_code(code)
_query = query
_code = code
_endpoint = endpoint
_headers = headers
_payload = payload
_method = match_code(code)


func match_code(code : int) -> int:
match code:
SupabaseQuery.REQUESTS.INSERT: return HTTPClient.METHOD_POST
SupabaseQuery.REQUESTS.SELECT: return HTTPClient.METHOD_GET
SupabaseQuery.REQUESTS.UPDATE: return HTTPClient.METHOD_PATCH
SupabaseQuery.REQUESTS.DELETE: return HTTPClient.METHOD_DELETE
_: return HTTPClient.METHOD_POST
match code:
SupabaseQuery.REQUESTS.INSERT: return HTTPClient.METHOD_POST
SupabaseQuery.REQUESTS.SELECT: return HTTPClient.METHOD_GET
SupabaseQuery.REQUESTS.UPDATE: return HTTPClient.METHOD_PATCH
SupabaseQuery.REQUESTS.DELETE: return HTTPClient.METHOD_DELETE
_: return HTTPClient.METHOD_POST

func push_request(httprequest : HTTPRequest) -> void:
_handler = httprequest
httprequest.connect("request_completed", self, "_on_task_completed")
httprequest.request(_endpoint, _headers, true, _method, _payload)
_handler = httprequest
httprequest.connect("request_completed", self, "_on_task_completed")
httprequest.request(_endpoint, _headers, true, _method, _payload)

func _on_task_completed(result : int, response_code : int, headers : PoolStringArray, body : PoolByteArray) -> void:
var result_body = JSON.parse(body.get_string_from_utf8()).result if body.get_string_from_utf8() else {}
if response_code in [200, 201, 204]:
complete(result_body)
else:
var supabase_error : SupabaseDatabaseError = SupabaseDatabaseError.new(result_body)
complete(null, supabase_error)
if _query!=null: _query.clean()
var result_body = JSON.parse(body.get_string_from_utf8()).result if body.get_string_from_utf8() else {}
if response_code in [200, 201, 204]:
complete(result_body)
else:
var supabase_error : SupabaseDatabaseError = SupabaseDatabaseError.new(result_body)
complete(null, supabase_error)
if _query!=null: _query.clean()

func complete(_result, _error : SupabaseDatabaseError = null) -> void:
data = _result
error = _error
if _handler : _handler.queue_free()
emit_signal("completed", self)
data = _result
error = _error
if _handler : _handler.queue_free()
emit_signal("completed", self)
Loading

0 comments on commit 04c3759

Please sign in to comment.