Skip to content

Commit

Permalink
chore: release rc
Browse files Browse the repository at this point in the history
  • Loading branch information
christyjacob4 committed Aug 17, 2024
1 parent c15ab70 commit 260f5a5
Show file tree
Hide file tree
Showing 16 changed files with 488 additions and 39 deletions.
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ let package = Package(
),
],
dependencies: [
.package(url: "https://github.com/swift-server/async-http-client.git", from: "1.17.0"),
.package(url: "https://github.com/apple/swift-nio.git", from: "2.32.0"),
.package(url: "https://github.com/swift-server/async-http-client.git", from: "1.19.0"),
.package(url: "https://github.com/apple/swift-nio.git", from: "2.58.0"),
],
targets: [
.target(
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

![Swift Package Manager](https://img.shields.io/github/v/release/appwrite/sdk-for-apple.svg?color=green&style=flat-square)
![License](https://img.shields.io/github/license/appwrite/sdk-for-apple.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.5.7-blue.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.6.0-blue.svg?style=flat-square)
[![Build Status](https://img.shields.io/travis/com/appwrite/sdk-generator?style=flat-square)](https://travis-ci.com/appwrite/sdk-generator)
[![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite)
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord)
Expand Down Expand Up @@ -31,7 +31,7 @@ Add the package to your `Package.swift` dependencies:

```swift
dependencies: [
.package(url: "git@github.com:appwrite/sdk-for-apple.git", from: "6.0.0"),
.package(url: "git@github.com:appwrite/sdk-for-apple.git", from: "7.0.0-rc.1"),
],
```

Expand Down
4 changes: 2 additions & 2 deletions Sources/Appwrite/Client.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ open class Client {
"x-sdk-name": "Apple",
"x-sdk-platform": "client",
"x-sdk-language": "apple",
"x-sdk-version": "6.0.0",
"x-appwrite-response-format": "1.5.0"
"x-sdk-version": "7.0.0-rc.1",
"x-appwrite-response-format": "1.6.0"
]

internal var config: [String: String] = [:]
Expand Down
24 changes: 14 additions & 10 deletions Sources/Appwrite/OAuth/WebAuthComponent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,24 @@ public class WebAuthComponent {
/// - url: The URL containing the cookie
///
public static func handleIncomingCookie(from url: URL) {
let components = URLComponents(string: url.absoluteString)!

let cookieParts = [String: String](uniqueKeysWithValues: components.queryItems!.map {
($0.name, $0.value!)
guard let components = URLComponents(string: url.absoluteString),
let queryItems = components.queryItems else {
return
}

let cookieParts = [String: String](uniqueKeysWithValues: queryItems.compactMap { item in
item.value.map { (item.name, $0) }
})

var domain = cookieParts["domain"]!
guard var domain = cookieParts["domain"],
let key = cookieParts["key"],
let secret = cookieParts["secret"] else {
return
}

domain.remove(at: domain.startIndex)

let key: String = cookieParts["key"]!
let secret: String = cookieParts["secret"]!
let path: String? = cookieParts["path"]
let expires: String? = cookieParts["expires"]
let maxAge: String? = cookieParts["maxAge"]
Expand Down Expand Up @@ -92,10 +99,7 @@ public class WebAuthComponent {
cookie += "; secure"
}

let existing = UserDefaults.standard.stringArray(forKey: domain)
let new = [cookie]

UserDefaults.standard.set(new, forKey: domain)
UserDefaults.standard.set([cookie], forKey: domain)

WebAuthComponent.onCallback(
scheme: components.scheme!,
Expand Down
14 changes: 5 additions & 9 deletions Sources/Appwrite/Services/Account.swift
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ open class Account: Service {
}

///
/// Add Authenticator
/// Create Authenticator
///
/// Add an authenticator app to be used as an MFA factor. Verify the
/// authenticator using the [verify
Expand Down Expand Up @@ -508,20 +508,16 @@ open class Account: Service {
/// Delete an authenticator for a user by ID.
///
/// @param AppwriteEnums.AuthenticatorType type
/// @param String otp
/// @throws Exception
/// @return array
///
open func deleteMfaAuthenticator(
type: AppwriteEnums.AuthenticatorType,
otp: String
type: AppwriteEnums.AuthenticatorType
) async throws -> Any {
let apiPath: String = "/account/mfa/authenticators/{type}"
.replacingOccurrences(of: "{type}", with: type.rawValue)

let apiParams: [String: Any?] = [
"otp": otp
]
let apiParams: [String: Any] = [:]

let apiHeaders: [String: String] = [
"content-type": "application/json"
Expand All @@ -535,7 +531,7 @@ open class Account: Service {
}

///
/// Create 2FA Challenge
/// Create MFA Challenge
///
/// Begin the process of MFA verification after sign-in. Finish the flow with
/// [updateMfaChallenge](/docs/references/cloud/client-web/account#updateMfaChallenge)
Expand Down Expand Up @@ -2037,7 +2033,7 @@ open class Account: Service {
}

///
/// Create phone verification (confirmation)
/// Update phone verification (confirmation)
///
/// Use this endpoint to complete the user phone verification process. Use the
/// **userId** and **secret** that were sent to your user's phone number to
Expand Down
2 changes: 2 additions & 0 deletions Sources/Appwrite/Services/Avatars.swift
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ open class Avatars: Service {
/// Use this endpoint to fetch the favorite icon (AKA favicon) of any remote
/// website URL.
///
/// This endpoint does not follow HTTP redirects.
///
/// @param String url
/// @throws Exception
Expand Down Expand Up @@ -180,6 +181,7 @@ open class Avatars: Service {
/// image at source quality. If dimensions are not specified, the default size
/// of image returned is 400x400px.
///
/// This endpoint does not follow HTTP redirects.
///
/// @param String url
/// @param Int width
Expand Down
132 changes: 123 additions & 9 deletions Sources/Appwrite/Services/Functions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,116 @@ import AppwriteModels
/// The Functions Service allows you view, create and manage your Cloud Functions.
open class Functions: Service {

///
/// List function templates
///
/// List available function templates. You can use template details in
/// [createFunction](/docs/references/cloud/server-nodejs/functions#create)
/// method.
///
/// @param [String] runtimes
/// @param [String] useCases
/// @param Int limit
/// @param Int offset
/// @throws Exception
/// @return array
///
open func listTemplates(
runtimes: [String]? = nil,
useCases: [String]? = nil,
limit: Int? = nil,
offset: Int? = nil
) async throws -> AppwriteModels.TemplateFunctionList {
let apiPath: String = "/functions/templates"

let apiParams: [String: Any?] = [
"runtimes": runtimes,
"useCases": useCases,
"limit": limit,
"offset": offset
]

let apiHeaders: [String: String] = [
"content-type": "application/json"
]

let converter: (Any) -> AppwriteModels.TemplateFunctionList = { response in
return AppwriteModels.TemplateFunctionList.from(map: response as! [String: Any])
}

return try await client.call(
method: "GET",
path: apiPath,
headers: apiHeaders,
params: apiParams,
converter: converter
)
}

///
/// Get function template
///
/// Get a function template using ID. You can use template details in
/// [createFunction](/docs/references/cloud/server-nodejs/functions#create)
/// method.
///
/// @param String templateId
/// @throws Exception
/// @return array
///
open func getTemplate(
templateId: String
) async throws -> AppwriteModels.TemplateFunction {
let apiPath: String = "/functions/templates/{templateId}"
.replacingOccurrences(of: "{templateId}", with: templateId)

let apiParams: [String: Any] = [:]

let apiHeaders: [String: String] = [
"content-type": "application/json"
]

let converter: (Any) -> AppwriteModels.TemplateFunction = { response in
return AppwriteModels.TemplateFunction.from(map: response as! [String: Any])
}

return try await client.call(
method: "GET",
path: apiPath,
headers: apiHeaders,
params: apiParams,
converter: converter
)
}

///
/// Download deployment
///
/// Get a Deployment's contents by its unique ID. This endpoint supports range
/// requests for partial or streaming file download.
///
/// @param String functionId
/// @param String deploymentId
/// @throws Exception
/// @return array
///
open func getDeploymentDownload(
functionId: String,
deploymentId: String
) async throws -> ByteBuffer {
let apiPath: String = "/functions/{functionId}/deployments/{deploymentId}/download"
.replacingOccurrences(of: "{functionId}", with: functionId)
.replacingOccurrences(of: "{deploymentId}", with: deploymentId)

let apiParams: [String: Any] = [:]

return try await client.call(
method: "GET",
path: apiPath,
params: apiParams
)
}

///
/// List executions
///
Expand Down Expand Up @@ -75,12 +185,13 @@ open class Functions: Service {
path: String? = nil,
method: AppwriteEnums.ExecutionMethod? = nil,
headers: Any? = nil,
scheduledAt: String? = nil
scheduledAt: String? = nil,
onProgress: ((UploadProgress) -> Void)? = nil
) async throws -> AppwriteModels.Execution {
let apiPath: String = "/functions/{functionId}/executions"
.replacingOccurrences(of: "{functionId}", with: functionId)

let apiParams: [String: Any?] = [
var apiParams: [String: Any?] = [
"body": body,
"async": async,
"path": path,
Expand All @@ -89,20 +200,23 @@ open class Functions: Service {
"scheduledAt": scheduledAt
]

let apiHeaders: [String: String] = [
"content-type": "application/json"
var apiHeaders: [String: String] = [
"content-type": "multipart/form-data"
]

let converter: (Any) -> AppwriteModels.Execution = { response in
return AppwriteModels.Execution.from(map: response as! [String: Any])
}

return try await client.call(
method: "POST",
let idParamName: String? = nil
return try await client.chunkedUpload(
path: apiPath,
headers: apiHeaders,
params: apiParams,
converter: converter
headers: &apiHeaders,
params: &apiParams,
paramName: paramName,
idParamName: idParamName,
converter: converter,
onProgress: onProgress
)
}

Expand Down
13 changes: 10 additions & 3 deletions Sources/AppwriteModels/Execution.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ public class Execution {
/// Function execution duration in seconds.
public let duration: Double

/// The scheduled time for execution. If left empty, execution will be queued immediately.
public let scheduledAt: String??


init(
id: String,
Expand All @@ -69,7 +72,8 @@ public class Execution {
responseHeaders: [Headers],
logs: String,
errors: String,
duration: Double
duration: Double,
scheduledAt: String??
) {
self.id = id
self.createdAt = createdAt
Expand All @@ -87,6 +91,7 @@ public class Execution {
self.logs = logs
self.errors = errors
self.duration = duration
self.scheduledAt = scheduledAt
}

public func toMap() -> [String: Any] {
Expand All @@ -106,7 +111,8 @@ public class Execution {
"responseHeaders": responseHeaders.map { $0.toMap() } as Any,
"logs": logs as Any,
"errors": errors as Any,
"duration": duration as Any
"duration": duration as Any,
"scheduledAt": scheduledAt as Any
]
}

Expand All @@ -127,7 +133,8 @@ public class Execution {
responseHeaders: (map["responseHeaders"] as! [[String: Any]]).map { Headers.from(map: $0) },
logs: map["logs"] as! String,
errors: map["errors"] as! String,
duration: map["duration"] as! Double
duration: map["duration"] as! Double,
scheduledAt: map["scheduledAt"] as? String?
)
}
}
Loading

0 comments on commit 260f5a5

Please sign in to comment.