Skip to content

Commit c98d783

Browse files
committed
Add enumeration for oauth-token-request
- Added conversion documentation. - Changed conformance of OAuthClientCredentialsGrantTokenRequest to Codable. - Added grantType in RefreshTokenGrantTokenRequest.CodingKeys to ensure TokenRequest is able to properly decode to and encode from RefreshTokenGrantTokenRequest.
1 parent ae5b1ea commit c98d783

4 files changed

Lines changed: 68 additions & 1 deletion

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Conversion for `oauth-types/src/oauth-token-request.ts`
2+
3+
## `export const oauthTokenRequestSchema`
4+
5+
This has been converted.

Sources/OAuthTypes/OAuthClientCredentialsGrantTokenRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77

88
/// A structure representing client credentials grant token requests for OAuth 2.0.
9-
public struct OAuthClientCredentialsGrantTokenRequest: Decodable {
9+
public struct OAuthClientCredentialsGrantTokenRequest: Codable {
1010

1111
/// The grant type itself.
1212
///

Sources/OAuthTypes/OAuthRefreshTokenGrantTokenRequest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public struct RefreshTokenGrantTokenRequest: Codable {
2929
}
3030

3131
enum CodingKeys: String, CodingKey {
32+
case grantType = "grant_type"
3233
case refreshToken = "refresh_token"
3334
}
3435
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
//
2+
// OAuthTokenRequest.swift
3+
// ATOAuthKit
4+
//
5+
// Created by Christopher Jr Riley on 2025-08-04.
6+
//
7+
8+
/// An enumeration representing all supported OAuth 2.0 token request types.
9+
public enum TokenRequest: Codable {
10+
11+
/// Represents an OAuth 2.0 Authorization Code Grant token request.
12+
case oauthAuthorizationCodeGrantTokenRequest(AuthorizationCodeGrantTokenRequest)
13+
14+
/// Represents an OAuth 2.0 Refresh Token Grant token request.
15+
case oauthRefreshTokenGrantTokenRequest(RefreshTokenGrantTokenRequest)
16+
17+
/// Represents an OAuth 2.0 Resource Owner Password Credentials Grant token request.
18+
case oauthPasswordGrantTokenRequest(OAuthPasswordGrantTokenRequest)
19+
20+
/// Represents an OAuth 2.0 Client Credentials Grant token request.
21+
case oauthClientCredentialsGrantTokenRequest(OAuthClientCredentialsGrantTokenRequest)
22+
23+
public init(from decoder: Decoder) throws {
24+
let container = try decoder.container(keyedBy: CodingKeys.self)
25+
let grantType = try container.decode(String.self, forKey: .grantType)
26+
27+
switch grantType {
28+
case "authorization_code":
29+
self = .oauthAuthorizationCodeGrantTokenRequest(try AuthorizationCodeGrantTokenRequest(from: decoder))
30+
case "refresh_token":
31+
self = .oauthRefreshTokenGrantTokenRequest(try RefreshTokenGrantTokenRequest(from: decoder))
32+
case "password":
33+
self = .oauthPasswordGrantTokenRequest(try OAuthPasswordGrantTokenRequest(from: decoder))
34+
case "client_credentials":
35+
self = .oauthClientCredentialsGrantTokenRequest(try OAuthClientCredentialsGrantTokenRequest(from: decoder))
36+
default:
37+
throw DecodingError.typeMismatch(
38+
TokenRequest.self, DecodingError.Context(
39+
codingPath: decoder.codingPath, debugDescription: "Unknown TokenRequest type"))
40+
}
41+
}
42+
43+
public func encode(to encoder: Encoder) throws {
44+
var container = encoder.singleValueContainer()
45+
46+
switch self {
47+
case .oauthAuthorizationCodeGrantTokenRequest(let value):
48+
try container.encode(value)
49+
case .oauthRefreshTokenGrantTokenRequest(let value):
50+
try container.encode(value)
51+
case .oauthPasswordGrantTokenRequest(let value):
52+
try container.encode(value)
53+
case .oauthClientCredentialsGrantTokenRequest(let value):
54+
try container.encode(value)
55+
}
56+
}
57+
58+
enum CodingKeys: String, CodingKey {
59+
case grantType = "grant_type"
60+
}
61+
}

0 commit comments

Comments
 (0)