Invoke a Supabase Edge Function.
String
, and Data
. If it doesn't match any of these types we assume the payload is json
, serialize it and attach the Content-Type
header as application/json
. You can override this behaviour by passing in a Content-Type
header of your own.struct Response: Decodable {
// Expected response definition
}
let response: Response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
body: ["foo": "bar"]
)
)
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
body: ["foo": "bar"]
),
decode: { data, response in
String(data: data, encoding: .utf8)
}
)
print(type(of: response)) // String?
var response = Data()
for try await data try await supabase.functions._invokeWithStreamedResponse("hello") {
response.append(data)
}
do {
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
body: ["foo": "bar"]
)
)
} catch FunctionsError.httpError(let code, let data) {
print("Function returned code \(code) with response \(String(data: data, encoding: .utf8) ?? "")")
} catch FunctionsError.relayError {
print("Relay error")
} catch {
print("Other error: \(error.localizedDescription)")
}
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
headers: [
"my-custom-header": "my-custom-header-value"
]
)
)
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
body: ["foo": "bar"],
region: .usEast1
)
)
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
method: .delete,
headers: [
"my-custom-header": "my-custom-header-value"
],
body: ["foo": "bar"]
)
)
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
method: .get,
headers: [
"my-custom-header": "my-custom-header-value"
]
)
)
let response = try await supabase.functions
.invoke(
"hello",
options: FunctionInvokeOptions(
query: [URLQueryItem(name: "key", value: "value")]
)
)