这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged

Dev #38

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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