Skip to content

Commit 2015d78

Browse files
authored
Copy WordPressKit source code (#24784)
* Copy WordPressKit source code * Add WordPressKit targets to Package.swift * Fix swiftlint errors
1 parent 5c0bf55 commit 2015d78

File tree

314 files changed

+33661
-25
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

314 files changed

+33661
-25
lines changed

Modules/Package.resolved

Lines changed: 1 addition & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Modules/Package.swift

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ let package = Package(
4949
.package(url: "https://github.com/wordpress-mobile/NSObject-SafeExpectations", from: "0.0.6"),
5050
.package(url: "https://github.com/wordpress-mobile/wpxmlrpc", from: "0.9.0"),
5151
.package(url: "https://github.com/wordpress-mobile/NSURL-IDN", revision: "b34794c9a3f32312e1593d4a3d120572afa0d010"),
52-
.package(
53-
url: "https://github.com/wordpress-mobile/WordPressKit-iOS",
54-
branch: "rework-spm"
55-
),
5652
.package(url: "https://github.com/zendesk/support_sdk_ios", from: "8.0.3"),
5753
// We can't use wordpress-rs branches nor commits here. Only tags work.
5854
.package(url: "https://github.com/Automattic/wordpress-rs", revision: "alpha-20250901"),
@@ -88,9 +84,9 @@ let package = Package(
8884
dependencies: [
8985
"WordPressShared",
9086
"WordPressUI",
91-
.product(name: "Gridicons", package: "Gridicons-iOS"),
9287
// TODO: Remove — It's here just for a NSMutableParagraphStyle init helper
93-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
88+
"WordPressKit",
89+
.product(name: "Gridicons", package: "Gridicons-iOS"),
9490
],
9591
// Set to v5 to avoid @Sendable warnings and errors
9692
swiftSettings: [.swiftLanguageMode(.v5)]
@@ -99,7 +95,7 @@ let package = Package(
9995
name: "JetpackStats",
10096
dependencies: [
10197
"WordPressUI",
102-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
98+
"WordPressKit",
10399
],
104100
resources: [.process("Resources")]
105101
),
@@ -110,6 +106,7 @@ let package = Package(
110106
"BuildSettingsKit",
111107
"SFHFKeychainUtils",
112108
"WordPressShared",
109+
"WordPressKit",
113110
// Even though the extension is all in Swift, we need to include the Objective-C
114111
// version of CocoaLumberjack to avoid linking issues with other dependencies that
115112
// use it.
@@ -121,7 +118,6 @@ let package = Package(
121118
// in SharedCoreDataStack.o
122119
.product(name: "CocoaLumberjack", package: "CocoaLumberjack"),
123120
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
124-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
125121
],
126122
resources: [.process("Resources/Extensions.xcdatamodeld")]
127123
),
@@ -176,6 +172,35 @@ let package = Package(
176172
resources: [.process("Resources")],
177173
swiftSettings: [.swiftLanguageMode(.v5)]
178174
),
175+
.target(name: "WordPressKitObjCUtils"),
176+
.target(
177+
name: "WordPressKitModels",
178+
dependencies: [
179+
"NSObject-SafeExpectations",
180+
"WordPressKitObjCUtils",
181+
]
182+
),
183+
.target(
184+
name: "WordPressKitObjC",
185+
dependencies: [
186+
"NSObject-SafeExpectations",
187+
"wpxmlrpc",
188+
"WordPressKitModels",
189+
"WordPressKitObjCUtils",
190+
],
191+
publicHeadersPath: "include"
192+
),
193+
.target(
194+
name: "WordPressKit",
195+
dependencies: [
196+
"WordPressKitObjC",
197+
"WordPressKitModels",
198+
"WordPressKitObjCUtils",
199+
"NSObject-SafeExpectations",
200+
"wpxmlrpc",
201+
],
202+
swiftSettings: [.swiftLanguageMode(.v5)]
203+
),
179204
.target(
180205
name: "WordPressReader",
181206
dependencies: ["AsyncImageKit", "WordPressUI", "WordPressShared"],
@@ -240,10 +265,10 @@ enum XcodeSupport {
240265
"BuildSettingsKit",
241266
"WordPressShared",
242267
"WordPressUI",
268+
"WordPressKit",
243269
.product(name: "Gridicons", package: "Gridicons-iOS"),
244270
.product(name: "NSURL-IDN", package: "NSURL-IDN"),
245271
.product(name: "SVProgressHUD", package: "SVProgressHUD"),
246-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
247272
.product(name: "Gravatar", package: "Gravatar-SDK-iOS"),
248273
.product(name: "GravatarUI", package: "Gravatar-SDK-iOS"),
249274
]
@@ -257,6 +282,7 @@ enum XcodeSupport {
257282
"WordPressUI",
258283
"TextBundle",
259284
"TracksMini",
285+
"WordPressKit",
260286
// Even though the extensions are all in Swift, we need to include the Objective-C
261287
// version of CocoaLumberjack to avoid linking issues with other dependencies that
262288
// use it.
@@ -275,7 +301,6 @@ enum XcodeSupport {
275301
.product(name: "ZIPFoundation", package: "ZIPFoundation"),
276302
.product(name: "Aztec", package: "AztecEditor-iOS"),
277303
.product(name: "WordPressEditor", package: "AztecEditor-iOS"),
278-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
279304
]
280305

281306
let testDependencies: [Target.Dependency] = [
@@ -300,6 +325,7 @@ enum XcodeSupport {
300325
"WordPressReader",
301326
"WordPressUI",
302327
"WordPressCore",
328+
"WordPressKit",
303329
.product(name: "Alamofire", package: "Alamofire"),
304330
.product(name: "AutomatticAbout", package: "AutomatticAbout-swift"),
305331
.product(name: "AutomatticTracks", package: "Automattic-Tracks-iOS"),
@@ -322,7 +348,6 @@ enum XcodeSupport {
322348
.product(name: "SVProgressHUD", package: "SVProgressHUD"),
323349
.product(name: "SwiftSoup", package: "SwiftSoup"),
324350
.product(name: "UIDeviceIdentifier", package: "UIDeviceIdentifier"),
325-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
326351
.product(name: "ZendeskSupportSDK", package: "support_sdk_ios"),
327352
.product(name: "ZIPFoundation", package: "ZIPFoundation"),
328353
.product(name: "WordPressAPI", package: "wordpress-rs"),
@@ -345,16 +370,16 @@ enum XcodeSupport {
345370
"BuildSettingsKit",
346371
"FormattableContentKit",
347372
"SFHFKeychainUtils",
373+
"WordPressKit",
348374
.product(name: "CocoaLumberjack", package: "CocoaLumberjack"),
349375
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
350376
.product(name: "NSObject-SafeExpectations", package: "NSObject-SafeExpectations"),
351377
.product(name: "NSURL-IDN", package: "NSURL-IDN"),
352378
.product(name: "WordPressAPI", package: "wordpress-rs"),
353-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
354379
]),
355380
.xcodeTarget("XcodeTarget_WordPressKitTests", dependencies: testDependencies + [
356381
"wpxmlrpc",
357-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
382+
"WordPressKit",
358383
]),
359384
.xcodeTarget("XcodeTarget_WordPressAuthentificator", dependencies: wordPresAuthentificatorDependencies),
360385
.xcodeTarget("XcodeTarget_WordPressAuthentificatorTests", dependencies: wordPresAuthentificatorDependencies + testDependencies),
@@ -387,6 +412,7 @@ enum XcodeSupport {
387412
"TracksMini",
388413
"WordPressShared",
389414
"WordPressUI",
415+
"WordPressKit",
390416
// Even though the extensions are all in Swift, we need to include the Objective-C
391417
// version of CocoaLumberjack to avoid linking issues with other dependencies that
392418
// use it.
@@ -399,7 +425,6 @@ enum XcodeSupport {
399425
.product(name: "CocoaLumberjack", package: "CocoaLumberjack"),
400426
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
401427
.product(name: "WordPressAPI", package: "wordpress-rs"),
402-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
403428
]),
404429
.xcodeTarget("XcodeTarget_Intents", dependencies: [
405430
"BuildSettingsKit",
@@ -427,13 +452,13 @@ enum XcodeSupport {
427452
"FormattableContentKit",
428453
"SFHFKeychainUtils",
429454
"WordPressShared",
455+
"WordPressKit",
430456
.product(name: "CocoaLumberjack", package: "CocoaLumberjack"),
431457
.product(name: "CocoaLumberjackSwift", package: "CocoaLumberjack"),
432458
.product(name: "Gravatar", package: "Gravatar-SDK-iOS"),
433459
.product(name: "NSObject-SafeExpectations", package: "NSObject-SafeExpectations"),
434460
.product(name: "NSURL-IDN", package: "NSURL-IDN"),
435461
.product(name: "WordPressAPI", package: "wordpress-rs"),
436-
.product(name: "WordPressKit", package: "WordPressKit-iOS"),
437462
]
438463
),
439464
]
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import Foundation
2+
3+
@frozen public enum SocialServiceName: String {
4+
case google
5+
case apple
6+
}
7+
8+
extension AccountServiceRemoteREST {
9+
10+
/// Connect to the specified social service via its OpenID Connect (JWT) token.
11+
///
12+
/// - Parameters:
13+
/// - service The name of the social service.
14+
/// - token The OpenID Connect (JWT) ID token identifying the user on the social service.
15+
/// - connectParameters Dictionary containing additional endpoint parameters. Currently only used for the Apple service.
16+
/// - oAuthClientID The WPCOM REST API client ID.
17+
/// - oAuthClientSecret The WPCOM REST API client secret.
18+
/// - success The block that will be executed on success.
19+
/// - failure The block that will be executed on failure.
20+
public func connectToSocialService(_ service: SocialServiceName,
21+
serviceIDToken token: String,
22+
connectParameters: [String: AnyObject]? = nil,
23+
oAuthClientID: String,
24+
oAuthClientSecret: String,
25+
success: @escaping (() -> Void),
26+
failure: @escaping ((Error) -> Void)) {
27+
let path = self.path(forEndpoint: "me/social-login/connect", withVersion: ._1_1)
28+
29+
var params = [
30+
"client_id": oAuthClientID,
31+
"client_secret": oAuthClientSecret,
32+
"service": service.rawValue,
33+
"id_token": token
34+
] as [String: AnyObject]
35+
36+
if let connectParameters {
37+
params.merge(connectParameters, uniquingKeysWith: { (current, _) in current })
38+
}
39+
40+
wordPressComRESTAPI.post(path, parameters: params, success: { (_, _) in
41+
success()
42+
}, failure: { (error, _) in
43+
failure(error)
44+
})
45+
}
46+
47+
/// Get Apple connect parameters from provided account information.
48+
///
49+
/// - Parameters:
50+
/// - email Email from Apple account.
51+
/// - fullName User's full name from Apple account.
52+
/// - Returns: Dictionary with endpoint parameters, to be used when connecting to social service.
53+
static public func appleSignInParameters(email: String, fullName: String) -> [String: AnyObject] {
54+
return [
55+
"user_email": email as AnyObject,
56+
"user_name": fullName as AnyObject
57+
]
58+
}
59+
60+
/// Disconnect fromm the specified social service.
61+
///
62+
/// - Parameters:
63+
/// - service The name of the social service.
64+
/// - oAuthClientID The WPCOM REST API client ID.
65+
/// - oAuthClientSecret The WPCOM REST API client secret.
66+
/// - success The block that will be executed on success.
67+
/// - failure The block that will be executed on failure.
68+
public func disconnectFromSocialService(_ service: SocialServiceName, oAuthClientID: String, oAuthClientSecret: String, success: @escaping(() -> Void), failure: @escaping((Error) -> Void)) {
69+
let path = self.path(forEndpoint: "me/social-login/disconnect", withVersion: ._1_1)
70+
let params = [
71+
"client_id": oAuthClientID,
72+
"client_secret": oAuthClientSecret,
73+
"service": service.rawValue
74+
] as [String: AnyObject]
75+
76+
wordPressComRESTAPI.post(path, parameters: params, success: { (_, _) in
77+
success()
78+
}, failure: { (error, _) in
79+
failure(error)
80+
})
81+
}
82+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import Foundation
2+
3+
public struct AccountSettings {
4+
// MARK: - My Profile
5+
public let firstName: String // first_name
6+
public let lastName: String // last_name
7+
public let displayName: String // display_name
8+
public let aboutMe: String // description
9+
10+
// MARK: - Account Settings
11+
public let username: String // user_login
12+
public let usernameCanBeChanged: Bool // user_login_can_be_changed
13+
public let email: String // user_email
14+
public let emailPendingAddress: String? // new_user_email
15+
public let emailPendingChange: Bool // user_email_change_pending
16+
public let primarySiteID: Int // primary_site_ID
17+
public let webAddress: String // user_URL
18+
public let language: String // language
19+
public let tracksOptOut: Bool
20+
public let blockEmailNotifications: Bool
21+
public let twoStepEnabled: Bool // two_step_enabled
22+
23+
public init(firstName: String,
24+
lastName: String,
25+
displayName: String,
26+
aboutMe: String,
27+
username: String,
28+
usernameCanBeChanged: Bool,
29+
email: String,
30+
emailPendingAddress: String?,
31+
emailPendingChange: Bool,
32+
primarySiteID: Int,
33+
webAddress: String,
34+
language: String,
35+
tracksOptOut: Bool,
36+
blockEmailNotifications: Bool,
37+
twoStepEnabled: Bool) {
38+
self.firstName = firstName
39+
self.lastName = lastName
40+
self.displayName = displayName
41+
self.aboutMe = aboutMe
42+
self.username = username
43+
self.usernameCanBeChanged = usernameCanBeChanged
44+
self.email = email
45+
self.emailPendingAddress = emailPendingAddress
46+
self.emailPendingChange = emailPendingChange
47+
self.primarySiteID = primarySiteID
48+
self.webAddress = webAddress
49+
self.language = language
50+
self.tracksOptOut = tracksOptOut
51+
self.blockEmailNotifications = blockEmailNotifications
52+
self.twoStepEnabled = twoStepEnabled
53+
}
54+
}
55+
56+
@frozen public enum AccountSettingsChange {
57+
case firstName(String)
58+
case lastName(String)
59+
case displayName(String)
60+
case aboutMe(String)
61+
case email(String)
62+
case emailRevertPendingChange
63+
case primarySite(Int)
64+
case webAddress(String)
65+
case language(String)
66+
case tracksOptOut(Bool)
67+
68+
var stringValue: String {
69+
switch self {
70+
case .firstName(let value):
71+
return value
72+
case .lastName(let value):
73+
return value
74+
case .displayName(let value):
75+
return value
76+
case .aboutMe(let value):
77+
return value
78+
case .email(let value):
79+
return value
80+
case .emailRevertPendingChange:
81+
return String(false)
82+
case .primarySite(let value):
83+
return String(value)
84+
case .webAddress(let value):
85+
return value
86+
case .language(let value):
87+
return value
88+
case .tracksOptOut(let value):
89+
return String(value)
90+
}
91+
}
92+
}
93+
94+
public typealias AccountSettingsChangeWithString = (String) -> AccountSettingsChange
95+
public typealias AccountSettingsChangeWithInt = (Int) -> AccountSettingsChange

0 commit comments

Comments
 (0)