0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-03-10 22:22:45 -05:00

docs: add zh-CN Swift SDK reference (#602)

* docs: add zh-CN Swift SDK reference

* fix: typo
This commit is contained in:
Gao Sun 2022-04-22 17:13:04 +08:00 committed by GitHub
parent bfececcfe5
commit 4945995e6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 1316 additions and 24 deletions

View file

@ -49,7 +49,7 @@ static func fetchToken(
```
Fetch token by `authorization_code`.
The returned `access_token` is only for user info enpoint.
The returned `access_token` is only for [UserInfo Endpoint](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo).
Note the function will NOT validate any token in the response.
### `fetchToken(useSession:byRefreshToken:tokenEndpoint:clientId:resource:scopes:)`

View file

@ -38,14 +38,13 @@ static func decodeIdToken(_ idToken: String) throws -> IdTokenClaims
```
Decode ID Token claims WITHOUT validation.
- Parameter token: The JWT to decode
- Returns: A set of ID Token claims
- Returns: A set of ID Token claims.
#### Parameters
| Name | Description |
| ---- | ----------- |
| token | The JWT to decode |
| token | The JWT to decode. |
### `verifyIdToken(_:issuer:clientId:jwks:forTimeInterval:)`

View file

@ -63,10 +63,6 @@ Post a notification that tells Logto clients to handle the given URL.
Usually this function need to be called in `onOpenURL(perform:)` in SwiftUI or `application(_:open:options:)` in AppDelegate. See integration guide for detailed information.
- Parameters:
- forClientId: If the notification is for specific client ID only. When `nil`, all Logto clients will try to handle the notification.
- url:The URL that needs to be handled.
#### Parameters
| Name | Description |
@ -94,8 +90,6 @@ public func signInWithBrowser(
Start a sign in session with WKWebView. If the function returns with no error threw, it means the user has signed in successfully.
- Parameters:
- redirectUri: One of Redirect URIs of this application.
- Throws: An error if the session failed to complete.
#### Parameters
@ -120,14 +114,12 @@ Clear all tokens in memory and Keychain. Also try to revoke the Refresh Token fr
@MainActor public func getAccessToken(for resource: String?) async throws -> String
```
Get access token for the given resrouce. If resource is `nil`, return the access token for user endpoint.
Get an Access Token for the given resource. If resource is `nil`, return the Access Token for user endpoint.
If the cached access token has expired, this function will try to use `refreshToken` to fetch a new access token from the OIDC provider.
If the cached Access Token has expired, this function will try to use `refreshToken` to fetch a new Access Token from the OIDC provider.
- Parameters:
- resource: The resource indicator.
- Throws: An error if failed to get a valid access token.
- Returns: Access token in string.
- Throws: An error if failed to get a valid Access Token.
- Returns: Access Token in string.
#### Parameters

View file

@ -1,3 +0,0 @@
{
"position": 4
}

View file

@ -10,6 +10,7 @@
- [LogtoClient.NotificationObject](Structs/LogtoClient.NotificationObject.md)
- [LogtoConfig](Structs/LogtoConfig.md)
- [LogtoError](Structs/LogtoError.md)
## Enums
- [LogtoClientErrorTypes](Enums/LogtoClientErrorTypes.md)

View file

@ -1,3 +1,3 @@
{
"position": 5
"position": 4
}

View file

@ -1,10 +1,26 @@
{
"version.label": {
"message": "下一个",
"description": "The label for version current"
"message": "下一个"
},
"sidebar.tutorialSidebar.category.Integrate SDK": {
"message": "集成 SDK",
"description": "The label for category Integrate SDK in sidebar tutorialSidebar"
"message": "集成 SDK"
},
"sidebar.sdkSidebar.category.Classes": {
"message": "类Classes"
},
"sidebar.sdkSidebar.category.Enums": {
"message": "枚举Enums"
},
"sidebar.sdkSidebar.category.Protocols": {
"message": "接口Protocols"
},
"sidebar.sdkSidebar.category.Typealiases": {
"message": "类型别名Typealiases"
},
"sidebar.sdkSidebar.category.Extensions": {
"message": "扩展Extensions"
},
"sidebar.sdkSidebar.category.Structs": {
"message": "结构体Structs"
}
}

View file

@ -0,0 +1 @@
# SDK 参考概览

View file

@ -0,0 +1,24 @@
---
sidebar_position: 1
---
**枚举**
# `JwtField`
```swift
public enum JwtField
```
## 枚举情况
### `audience`
```swift
case audience
```
### `issuer`
```swift
case issuer
```

View file

@ -0,0 +1,135 @@
---
sidebar_position: 2
---
**枚举**
# `LogtoCore`
```swift
public enum LogtoCore
```
## 结构体
### [CodeTokenResponse](../Structs/LogtoCore.CodeTokenResponse.md)
### [OidcConfigResponse](../Structs/LogtoCore.OidcConfigResponse.md)
### [RefreshTokenTokenResponse](../Structs/LogtoCore.RefreshTokenTokenResponse.md)
### [UserInfoResponse](../Structs/LogtoCore.UserInfoResponse.md)
## 属性
### `postHeaders`
```swift
static let postHeaders: [String: String] = [
"Content-Type": "application/x-www-form-urlencoded",
]
```
## 方法
### `fetchOidcConfig(useSession:uri:)`
```swift
static func fetchOidcConfig(
useSession session: NetworkSession = URLSession.shared,
uri: URL
) async throws -> OidcConfigResponse
```
### `fetchToken(useSession:byAuthorizationCode:codeVerifier:tokenEndpoint:clientId:redirectUri:)`
```swift
static func fetchToken(
useSession session: NetworkSession = URLSession.shared,
byAuthorizationCode code: String,
codeVerifier: String,
tokenEndpoint: String,
clientId: String,
redirectUri: String
) async throws -> CodeTokenResponse
```
Fetch token by `authorization_code`.
The returned `access_token` is only for [UserInfo Endpoint](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo).
Note the function will NOT validate any token in the response.
### `fetchToken(useSession:byRefreshToken:tokenEndpoint:clientId:resource:scopes:)`
```swift
static func fetchToken(
useSession session: NetworkSession = URLSession.shared,
byRefreshToken refreshToken: String,
tokenEndpoint: String,
clientId: String,
resource: String?,
scopes: [String]
) async throws -> RefreshTokenTokenResponse
```
Fetch token by `refresh_token`.
Note the function will NOT validate any token in the response.
### `fetchUserInfo(useSession:userInfoEndpoint:accessToken:)`
```swift
static func fetchUserInfo(
useSession session: NetworkSession = URLSession.shared,
userInfoEndpoint: String,
accessToken: String
) async throws -> UserInfoResponse
```
### `fetchJwkSet(useSession:jwksUri:)`
```swift
static func fetchJwkSet(
useSession session: NetworkSession = URLSession.shared,
jwksUri: String
) async throws -> JWKSet
```
### `generateSignInUri(authorizationEndpoint:clientId:redirectUri:codeChallenge:state:scopes:resources:)`
```swift
static func generateSignInUri(
authorizationEndpoint: String,
clientId: String,
redirectUri: URL,
codeChallenge: String,
state: String,
scopes: [String] = [],
resources: [String] = []
) throws -> URL
```
### `generateSignOutUri(endSessionEndpoint:idToken:postLogoutRedirectUri:)`
```swift
static func generateSignOutUri(
endSessionEndpoint: String,
idToken: String,
postLogoutRedirectUri: String?
) throws -> URL
```
### `revoke(useSession:token:revocationEndpoint:clientId:)`
```swift
static func revoke(
useSession session: NetworkSession = URLSession.shared,
token: String,
revocationEndpoint: String,
clientId: String
) async throws
```
### `verifyAndParseSignInCallbackUri(_:redirectUri:state:)`
```swift
static func verifyAndParseSignInCallbackUri(
_ callbackUri: URL,
redirectUri: URL,
state: String
) throws -> String
```
Verify the given `callbackUri` matches the requirements and return `code` parameter if success.

View file

@ -0,0 +1,24 @@
---
sidebar_position: 3.1
---
**枚举**
# `LogtoErrors.Response`
```swift
public enum Response: LocalizedError, Equatable
```
## 枚举情况
### `notHttpResponse(response:)`
```swift
case notHttpResponse(response: URLResponse?)
```
### `withCode(code:httpResponse:data:)`
```swift
case withCode(code: Int, httpResponse: HTTPURLResponse, data: Data?)
```

View file

@ -0,0 +1,42 @@
---
sidebar_position: 3.1
---
**枚举**
# `LogtoErrors.UriVerification`
```swift
public enum UriVerification: LocalizedError, Equatable
```
## 枚举情况
### `redirectUriMismatched`
```swift
case redirectUriMismatched
```
### `decodeComponentsFailed`
```swift
case decodeComponentsFailed
```
### `stateMismatched`
```swift
case stateMismatched
```
### `errorItemFound(items:)`
```swift
case errorItemFound(items: [URLQueryItem])
```
### `missingCode`
```swift
case missingCode
```

View file

@ -0,0 +1,24 @@
---
sidebar_position: 3.1
---
**枚举**
# `LogtoErrors.UrlConstruction`
```swift
public enum UrlConstruction: LocalizedError, Equatable
```
## 枚举情况
### `invalidEndpoint`
```swift
case invalidEndpoint
```
### `unableToConstructUrl`
```swift
case unableToConstructUrl
```

View file

@ -0,0 +1,16 @@
---
sidebar_position: 3
---
**枚举**
# `LogtoErrors`
```swift
public enum LogtoErrors
```
## 枚举
### [Response](LogtoErrors.Response.md)
### [UriVerification](LogtoErrors.UriVerification.md)
### [UrlConstruction](LogtoErrors.UrlConstruction.md)

View file

@ -0,0 +1,24 @@
---
sidebar_position: 4.1
---
**枚举**
# `LogtoRequest.HttpMethod`
```swift
public enum HttpMethod: String
```
## 枚举情况
### `get`
```swift
case get = "GET"
```
### `post`
```swift
case post = "POST"
```

View file

@ -0,0 +1,81 @@
---
sidebar_position: 4
---
**枚举**
# `LogtoRequest`
```swift
public enum LogtoRequest
```
## 枚举
### [LogtoRequest.HttpMethod](LogtoRequest.HttpMethod.md)
## 方法
### `load(useSession:method:url:headers:body:)`
```swift
public static func load(
useSession session: NetworkSession,
method: HttpMethod,
url: URL,
headers: [String: String] = [:],
body: Data? = nil
) async -> (Data?, Error?)
```
### `load(useSession:method:endpoint:headers:body:)`
```swift
public static func load(
useSession session: NetworkSession,
method: HttpMethod,
endpoint: String,
headers: [String: String] = [:],
body: Data? = nil
) async -> (Data?, Error?)
```
### `get(useSession:endpoint:headers:)`
```swift
public static func get<T: Codable>(
useSession session: NetworkSession,
endpoint: String,
headers: [String: String] = [:]
) async throws -> T
```
### `get(useSession:url:headers:)`
```swift
public static func get<T: Codable>(
useSession session: NetworkSession,
url: URL,
headers: [String: String] = [:]
) async throws -> T
```
### `post(useSession:endpoint:headers:body:)`
```swift
public static func post<T: Codable>(
useSession session: NetworkSession,
endpoint: String,
headers: [String: String] = [:],
body: Data? = nil
) async throws -> T
```
### `post(useSession:endpoint:headers:body:)`
```swift
public static func post(
useSession session: NetworkSession,
endpoint: String,
headers: [String: String] = [:],
body: Data? = nil
) async throws
```

View file

@ -0,0 +1,66 @@
**枚举**
# `LogtoUtilities`
```swift
public enum LogtoUtilities
```
## 方法
### `withReservedScopes(_:)`
```swift
public static func withReservedScopes(_ scopes: [String]) -> [String]
```
### `generateState()`
```swift
public static func generateState() -> String
```
### `generateCodeVerifier()`
```swift
public static func generateCodeVerifier() -> String
```
### `generateCodeChallenge(codeVerifier:)`
```swift
public static func generateCodeChallenge(codeVerifier: String) -> String
```
### `decodeIdToken(_:)`
```swift
static func decodeIdToken(_ idToken: String) throws -> IdTokenClaims
```
Decode ID Token claims WITHOUT validation.
- Returns: A set of ID Token claims.
#### 参数
| 名称 | 描述 |
| ---- | ----------- |
| token | The JWT to decode. |
### `verifyIdToken(_:issuer:clientId:jwks:forTimeInterval:)`
```swift
static func verifyIdToken(
_ idToken: String,
issuer: String,
clientId: String,
jwks: JWKSet,
forTimeInterval: TimeInterval = Date().timeIntervalSince1970
) throws
```
Verify the give ID Token:
* One of the JWKs matches the token.
* Issuer matches token payload `iss`.
* Client ID matches token payload `aud`.
* The token is not expired.
* The token is issued in +/- 1min.

View file

@ -0,0 +1,13 @@
**扩展**
# `URLSession`
```swift
extension URLSession: NetworkSession
```
## 方法
### `loadData(with:)`
```swift
public func loadData(with request: URLRequest) async -> (Data?, Error?)
```

View file

@ -0,0 +1,14 @@
**接口**
# `NetworkSession`
```swift
public protocol NetworkSession
```
## 方法
### `loadData(with:)`
```swift
func loadData(with request: URLRequest) async -> (Data?, Error?)
```

View file

@ -0,0 +1,32 @@
# Logto 模块
## 结构体Structs
- [IdTokenClaims](Structs/IdTokenClaims.md)
- [JwtHeader](Structs/JwtHeader.md)
- [LogtoCore.CodeTokenResponse](Structs/LogtoCore.CodeTokenResponse.md)
- [LogtoCore.OidcConfigResponse](Structs/LogtoCore.OidcConfigResponse.md)
- [LogtoCore.RefreshTokenTokenResponse](Structs/LogtoCore.RefreshTokenTokenResponse.md)
- [LogtoCore.UserInfoResponse](Structs/LogtoCore.UserInfoResponse.md)
## 枚举Enums
- [JwtField](Enums/JwtField.md)
- [LogtoCore](Enums/LogtoCore.md)
- [LogtoErrors](Enums/LogtoErrors.md)
- [LogtoErrors.Response](Enums/LogtoErrors.Response.md)
- [LogtoErrors.UriVerification](Enums/LogtoErrors.UriVerification.md)
- [LogtoErrors.UrlConstruction](Enums/LogtoErrors.UrlConstruction.md)
- [LogtoRequest](Enums/LogtoRequest.md)
- [LogtoRequest.HttpMethod](Enums/LogtoRequest.HttpMethod.md)
- [LogtoUtilities](Enums/LogtoUtilities.md)
## 接口Protocols
- [NetworkSession](Protocols/NetworkSession.md)
## 扩展Extensions
- [URLSession](Extensions/URLSession.md)
该文件修改自 [SourceDocs](https://github.com/eneko/SourceDocs) 自动生成的内容

View file

@ -0,0 +1,44 @@
**结构体**
# `IdTokenClaims`
```swift
public struct IdTokenClaims: Codable, Equatable
```
## 属性
### `sub`
```swift
public let sub: String
```
### `atHash`
```swift
public let atHash: String?
```
### `aud`
```swift
public let aud: String
```
### `exp`
```swift
public let exp: Int64
```
### `iat`
```swift
public let iat: Int64
```
### `iss`
```swift
public let iss: String
```

View file

@ -0,0 +1,20 @@
**结构体**
# `JwtHeader`
```swift
public struct JwtHeader: Codable
```
## 属性
### `alg`
```swift
public let alg: SignatureAlgorithm
```
### `typ`
```swift
public let typ: TokenType
```

View file

@ -0,0 +1,38 @@
**结构体**
# `LogtoCore.CodeTokenResponse`
```swift
struct CodeTokenResponse: Codable, Equatable
```
## 属性
### `accessToken`
```swift
public let accessToken: String
```
### `refreshToken`
```swift
public let refreshToken: String
```
### `idToken`
```swift
public let idToken: String
```
### `scope`
```swift
public let scope: String
```
### `expiresIn`
```swift
public let expiresIn: Int64
```

View file

@ -0,0 +1,50 @@
**结构体**
# `LogtoCore.OidcConfigResponse`
```swift
struct OidcConfigResponse: Codable, Equatable
```
## 属性
### `authorizationEndpoint`
```swift
public let authorizationEndpoint: String
```
### `tokenEndpoint`
```swift
public let tokenEndpoint: String
```
### `endSessionEndpoint`
```swift
public let endSessionEndpoint: String
```
### `revocationEndpoint`
```swift
public let revocationEndpoint: String
```
### `userinfoEndpoint`
```swift
public let userinfoEndpoint: String
```
### `jwksUri`
```swift
public let jwksUri: String
```
### `issuer`
```swift
public let issuer: String
```

View file

@ -0,0 +1,38 @@
**结构体**
# `LogtoCore.RefreshTokenTokenResponse`
```swift
struct RefreshTokenTokenResponse: Codable, Equatable
```
## 属性
### `accessToken`
```swift
public let accessToken: String
```
### `refreshToken`
```swift
public let refreshToken: String
```
### `idToken`
```swift
public let idToken: String?
```
### `scope`
```swift
public let scope: String
```
### `expiresIn`
```swift
public let expiresIn: Int64
```

View file

@ -0,0 +1,14 @@
**结构体**
# `LogtoCore.UserInfoResponse`
```swift
struct UserInfoResponse: Codable, Equatable
```
## 属性
### `sub`
```swift
public let sub: String
```

View file

@ -0,0 +1,154 @@
**类**
# `LogtoClient`
```swift
public class LogtoClient
```
## 结构体
### [NotificationObject](../Structs/LogtoClient.NotificationObject.md)
## 属性
### `HandleNotification`
```swift
public static let HandleNotification = Notification.Name("Logto Handle")
```
供 LogtoClient 处理的通知名称。
### `idToken`
```swift
public internal(set) var idToken: String?
```
经过缓存的原始 ID Token 字符串。使用 `.getIdTokenClaims()` 以获得结构化数据。
### `refreshToken`
```swift
public internal(set) var refreshToken: String?
```
经过缓存的 Refresh Token。
### `oidcConfig`
```swift
public internal(set) var oidcConfig: LogtoCore.OidcConfigResponse?
```
通过 [OIDC Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) 接口获得的配置。
### `isAuthenticated`
```swift
public var isAuthenticated: Bool
```
用户是否已经登录。
## 方法
### `handle(forClientId:url:)`
```swift
public static func handle(forClientId clientId: String? = nil, url: URL)
```
发送一个通知让 Logto 客户端处理该 URL。通常该函数需要在 `onOpenURL(perform:)` (SwiftUI) 或者 `application(_:open:options:)` (AppDelegate) 被调用。详情见集成指南。
#### 参数
| 名称 | 描述 |
| ---- | ----------- |
| forClientId | 该通知是否仅供特定的客户端 ID。当值为 `nil` 时,所有的 Logto 客户端会尝试处理该通知。 |
| url | 需要被处理的 URL。 |
### `init(useConfig:socialPlugins:session:)`
```swift
public init(
useConfig config: LogtoConfig,
socialPlugins: [LogtoSocialPlugin] = [],
session: NetworkSession = URLSession.shared
)
```
### `signInWithBrowser(redirectUri:)`
```swift
public func signInWithBrowser(
redirectUri: String
) async throws
```
启动一个基于 WKWebView 的登录会话。如果该函数在没有抛出错误的情况下返回,说明用户已经成功登录。
- 抛出:一个错误如果会话无法成功完成。
#### 参数
| 名称 | 描述 |
| ---- | ----------- |
| redirectUri | 该应用的 Redirect URI 列表中的一项。 |
### `signOut()`
```swift
func signOut() async -> Errors.SignOut?
```
清理所有在内存与 Keychain 中的 token。同时尝试吊销在 OIDC provider 中的 Refresh Token。
- 返回:一个错误如果吊销 token 失败。通常该错误可以被安全地忽略。
### `getAccessToken(for:)`
```swift
@MainActor public func getAccessToken(for resource: String?) async throws -> String
```
对于提供的 resource 获取一个 Access Token。如果 resource 为 `nil`,则返回用于用户信息接口的 Access Token。
如果缓存的 Access Token 已过期,该函数会尝试使用 Refresh Token 去 OIDC provider 获得一个新的 Access Token。
- 抛出:一个错误如果无法获取到一个有效的 Access Token。
- 返回Access Token 字符串。
#### 参数
| 名称 | 描述 |
| ---- | ----------- |
| resource | 资源指示器Resource indicator。 |
### `fetchUserInfo()`
```swift
public func fetchUserInfo() async throws -> LogtoCore.UserInfoResponse
```
### `getIdTokenClaims()`
```swift
public func getIdTokenClaims() throws -> IdTokenClaims
```
获取结构化的 [ID Token 声明](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)。
- 抛出:一个错误如果没有 ID Token 或者解码失败。
### `handle(url:)`
```swift
public func handle(url: URL) -> Bool
```
尝试通过遍历所有的社会化登录插件以处理给定的 URL。
如果有一个社会化登录插件处理了该 URL则遍历会立即停止。
- 返回:`true` 如果有一个社会化登录插件处理了该 URL。

View file

@ -0,0 +1,28 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.AccessToken`
```swift
public enum AccessToken
```
## 枚举情况
### `noRefreshTokenFound`
```swift
case noRefreshTokenFound
```
Keychain 中没有 Refresh Token。
### `unableToFetchTokenByRefreshToken`
```swift
case unableToFetchTokenByRefreshToken
```
无法通过 Refresh Token 获取一个新的 Access Token。该 Refresh Token 可能已经过期或者被吊销。

View file

@ -0,0 +1,20 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.JwkSet`
```swift
public enum JwkSet
```
## 枚举情况
### `unableToFetchJwkSet`
```swift
case unableToFetchJwkSet
```
无法通过给定的 URI 获取 JWK 集。

View file

@ -0,0 +1,20 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.OidcConfig`
```swift
public enum OidcConfig
```
## 枚举情况
### `unableToFetchOidcConfig`
```swift
case unableToFetchOidcConfig
```
无法从 OIDC provider 获取 OIDC 配置。

View file

@ -0,0 +1,58 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.SignIn`
```swift
public enum SignIn: String
```
## 枚举情况
### `unknownError`
```swift
case unknownError
```
### `authFailed`
```swift
case authFailed
```
无法完成验证(登录)。可能是一个内部错误或者用户取消了验证。
### `unableToConstructRedirectUri`
```swift
case unableToConstructRedirectUri
```
无法通过给定的字符串构建 Redirect URI。
### `unableToConstructAuthUri`
```swift
case unableToConstructAuthUri
```
无法通过配置构建 Redirect URI。请检查 OIDC 和 Logto 配置。
### `unableToFetchToken`
```swift
case unableToFetchToken
```
在验证结束后无法完成首次 token 请求。
### `unexpectedSignInCallback`
```swift
case unexpectedSignInCallback
```
登录回调 URI 无效。

View file

@ -0,0 +1,20 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.SignOut`
```swift
public enum SignOut: String
```
## 枚举情况
### `unableToRevokeToken`
```swift
case unableToRevokeToken
```
无法吊销 OIDC provider 中的 token。通常该错误可以被安全地忽略。

View file

@ -0,0 +1,20 @@
---
sidebar_position: 1.1
---
**枚举**
# `LogtoClientErrorTypes.UserInfo`
```swift
public enum UserInfo
```
## 枚举情况
### `unableToFetchUserInfo`
```swift
case unableToFetchUserInfo
```
无法通过 OIDC provider 获取用户信息。

View file

@ -0,0 +1,20 @@
---
sidebar_position: 1
---
**枚举**
# `LogtoClientErrorTypes`
```swift
public enum LogtoClientErrorTypes
```
## 枚举
### [AccessToken](LogtoClientErrorTypes.AccessToken.md)
### [JwkSet](LogtoClientErrorTypes.JwkSet.md)
### [OidcConfig](LogtoClientErrorTypes.OidcConfig.md)
### [SignIn](LogtoClientErrorTypes.SignIn.md)
### [SignOut](LogtoClientErrorTypes.SignOut.md)
### [UserInfo](LogtoClientErrorTypes.UserInfo.md)

View file

@ -0,0 +1,20 @@
---
sidebar_position: 2.1
---
**枚举**
# `LogtoClientErrors.IdToken`
```swift
public enum IdToken: String, LocalizedError
```
## 枚举情况
### `notAuthenticated`
```swift
case notAuthenticated
```
Keychain 中没有 ID Token。

View file

@ -0,0 +1,24 @@
---
sidebar_position: 2
---
**枚举**
# `LogtoClientErrors`
```swift
public enum LogtoClientErrors
```
## 枚举
### [IdToken](LogtoClientErrors.IdToken.md)
## 类型别名
### [AccessToken](../Typealiases/LogtoClientErrors.AccessToken.md)
### [JwkSet](../Typealiases/LogtoClientErrors.JwkSet.md)
### [OidcConfig](../Typealiases/LogtoClientErrors.OidcConfig.md)
### [SignIn](../Typealiases/LogtoClientErrors.SignIn.md)
### [SignOut](../Typealiases/LogtoClientErrors.SignOut.md)
### [UserInfo](../Typealiases/LogtoClientErrors.UserInfo.md)

View file

@ -0,0 +1,36 @@
# LogtoClient 模块
## 类Classes
- [LogtoClient](Classes/LogtoClient.md)
## 结构体Structs
- [AccessToken](Structs/AccessToken.md)
- [LogtoClient.NotificationObject](Structs/LogtoClient.NotificationObject.md)
- [LogtoConfig](Structs/LogtoConfig.md)
- [LogtoError](Structs/LogtoError.md)
## 枚举Enums
- [LogtoClientErrorTypes](Enums/LogtoClientErrorTypes.md)
- [LogtoClientErrorTypes.AccessToken](Enums/LogtoClientErrorTypes.AccessToken.md)
- [LogtoClientErrorTypes.JwkSet](Enums/LogtoClientErrorTypes.JwkSet.md)
- [LogtoClientErrorTypes.OidcConfig](Enums/LogtoClientErrorTypes.OidcConfig.md)
- [LogtoClientErrorTypes.SignIn](Enums/LogtoClientErrorTypes.SignIn.md)
- [LogtoClientErrorTypes.SignOut](Enums/LogtoClientErrorTypes.SignOut.md)
- [LogtoClientErrorTypes.UserInfo](Enums/LogtoClientErrorTypes.UserInfo.md)
- [LogtoClientErrors](Enums/LogtoClientErrors.md)
- [LogtoClientErrors.IdToken](Enums/LogtoClientErrors.IdToken.md)
## 类型别名Typealiases
- [LogtoClientErrors.AccessToken](Typealiases/LogtoClientErrors.AccessToken.md)
- [LogtoClientErrors.JwkSet](Typealiases/LogtoClientErrors.JwkSet.md)
- [LogtoClientErrors.OidcConfig](Typealiases/LogtoClientErrors.OidcConfig.md)
- [LogtoClientErrors.SignIn](Typealiases/LogtoClientErrors.SignIn.md)
- [LogtoClientErrors.SignOut](Typealiases/LogtoClientErrors.SignOut.md)
- [LogtoClientErrors.UserInfo](Typealiases/LogtoClientErrors.UserInfo.md)
- [UnifiedViewController](Typealiases/UnifiedViewController.md)
该文件修改自 [SourceDocs](https://github.com/eneko/SourceDocs) 自动生成的内容

View file

@ -0,0 +1,26 @@
**结构体**
# `AccessToken`
```swift
public struct AccessToken: Codable
```
## 属性
### `token`
```swift
public let token: String
```
### `scope`
```swift
public let scope: String
```
### `expiresAt`
```swift
public let expiresAt: TimeInterval
```

View file

@ -0,0 +1,20 @@
**结构体**
# `LogtoClient.NotificationObject`
```swift
public struct NotificationObject
```
## 属性
### `clientId`
```swift
public let clientId: String?
```
### `url`
```swift
public let url: URL
```

View file

@ -0,0 +1,51 @@
**结构体**
# `LogtoConfig`
```swift
public struct LogtoConfig
```
## 属性
### `endpoint`
```swift
public let endpoint: URL
```
### `clientId`
```swift
public let clientId: String
```
### `resources`
```swift
public let resources: [String]
```
### `usingPersistStorage`
```swift
public let usingPersistStorage: Bool
```
### `scopes`
```swift
public var scopes: [String]
```
## 方法
### `init(endpoint:clientId:scopes:resources:usingPersistStorage:)`
```swift
public init(
endpoint: String,
clientId: String,
scopes: [String] = [],
resources: [String] = [],
usingPersistStorage: Bool = true
) throws
```

View file

@ -0,0 +1,20 @@
**结构体**
# `LogtoError`
```swift
public struct LogtoError<T>: LocalizedError
```
## 属性
### `type`
```swift
public let type: T
```
### `innerError`
```swift
public let innerError: Error?
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.AccessToken`
```swift
public typealias AccessToken = LogtoError<LogtoClientErrorTypes.AccessToken>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.JwkSet`
```swift
public typealias JwkSet = LogtoError<LogtoClientErrorTypes.JwkSet>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.OidcConfig`
```swift
public typealias OidcConfig = LogtoError<LogtoClientErrorTypes.OidcConfig>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.SignIn`
```swift
public typealias SignIn = LogtoError<LogtoClientErrorTypes.SignIn>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.SignOut`
```swift
public typealias SignOut = LogtoError<LogtoClientErrorTypes.SignOut>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `LogtoClientErrors.UserInfo`
```swift
public typealias UserInfo = LogtoError<LogtoClientErrorTypes.UserInfo>
```

View file

@ -0,0 +1,7 @@
**类型别名**
# `UnifiedViewController`
```swift
public typealias UnifiedViewController = NSViewController | UIViewController
```

View file

@ -0,0 +1 @@
# @logto-io/swift