diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 49d40132..b9d02d1c 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -21,6 +21,10 @@ jobs: - uses: fwal/setup-swift@v1 with: swift-version: "5.6" + - name: Install Sourcery + run: brew update && brew install sourcery + - name: Check Flat API + run: ./flat-api.sh -c - name: Build tools & Lint if: steps.cache-spm.outputs.cache-hit != 'true' run: swift run -c release --package-path BuildTools swift-format lint -p --strict --recursive ./Sources ./Tests ./scripts diff --git a/Sources/TwitterAPIKit/APIv1/Account/AccountAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Account/AccountAPIv1.swift index 7bf7bd72..71f057a9 100644 --- a/Sources/TwitterAPIKit/APIv1/Account/AccountAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Account/AccountAPIv1.swift @@ -1,79 +1,50 @@ import Foundation -public protocol AccountAPIv1 { +open class AccountAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-settings - func getAccountSetting( - _ request: GetAccountSettingsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials - func getAccountVerify( - _ request: GetAccountVerifyCredentialsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner - func postRemoveProfileBanner( - _ request: PostAccountRemoveProfileBannerRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-settings - func postAccountSettings( - _ request: PostAccountSettingsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile - func postAccountProfile( - _ request: PostAccountUpdateProfileRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_banner - func postProfileBanner( - _ request: PostAccountUpdateProfileBannerRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image - func postProfileImage( - _ request: PostAccountUpdateProfileImageRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: AccountAPIv1 { public func getAccountSetting( _ request: GetAccountSettingsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials public func getAccountVerify( _ request: GetAccountVerifyCredentialsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner public func postRemoveProfileBanner( _ request: PostAccountRemoveProfileBannerRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-settings public func postAccountSettings( _ request: PostAccountSettingsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile public func postAccountProfile( _ request: PostAccountUpdateProfileRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_banner public func postProfileBanner( _ request: PostAccountUpdateProfileBannerRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile_image public func postProfileImage( _ request: PostAccountUpdateProfileImageRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Application/ApplicationAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Application/ApplicationAPIv1.swift index 759dbb6d..9294a7fd 100644 --- a/Sources/TwitterAPIKit/APIv1/Application/ApplicationAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Application/ApplicationAPIv1.swift @@ -1,16 +1,11 @@ import Foundation -public protocol ApplicationAPIv1 { +open class ApplicationAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/rate-limit-status/api-reference/get-application-rate_limit_status - func getRateLimit( + public func getRateLimit( _ request: GetApplicationRateLimitStatusRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: ApplicationAPIv1 { - func getRateLimit(_ request: GetApplicationRateLimitStatusRequestV1) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv1/BlockAndMute/BlockAndMuteAPIv1.swift b/Sources/TwitterAPIKit/APIv1/BlockAndMute/BlockAndMuteAPIv1.swift index 7e70c767..8fdc8df0 100644 --- a/Sources/TwitterAPIKit/APIv1/BlockAndMute/BlockAndMuteAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/BlockAndMute/BlockAndMuteAPIv1.swift @@ -1,104 +1,64 @@ import Foundation -public protocol BlockAndMuteAPIv1 { +open class BlockAndMuteAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-blocks-ids - func getBlockIDs( - _ request: GetBlocksIDsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-blocks-list - func getBlockUsers( - _ request: GetBlocksListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-ids - func getMuteIDs( - _ request: GetMutesUsersIDsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-list - func getMuteUsers( - _ request: GetMutesUsersListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-blocks-create - func postBlockUser( - _ request: PostBlocksCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-blocks-destroy - func postUnblockUser( - _ request: PostBlocksDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-create - func postMuteUser( - _ request: PostMutesUsersCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-destroy - func postUnmuteUser( - _ request: PostMutesUsersDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-users-report_spam - func postReportSpam( - _ request: PostUsersReportSpamRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: BlockAndMuteAPIv1 { - public func getBlockIDs( _ request: GetBlocksIDsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-blocks-list public func getBlockUsers( _ request: GetBlocksListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-ids public func getMuteIDs( _ request: GetMutesUsersIDsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-list public func getMuteUsers( _ request: GetMutesUsersListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-blocks-create public func postBlockUser( _ request: PostBlocksCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-blocks-destroy public func postUnblockUser( _ request: PostBlocksDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-create public func postMuteUser( _ request: PostMutesUsersCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-destroy public func postUnmuteUser( _ request: PostMutesUsersDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/post-users-report_spam public func postReportSpam( _ request: PostUsersReportSpamRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Collection/CollectionAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Collection/CollectionAPIv1.swift index 37009a80..424b17e4 100644 --- a/Sources/TwitterAPIKit/APIv1/Collection/CollectionAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Collection/CollectionAPIv1.swift @@ -1,115 +1,72 @@ import Foundation -public protocol CollectionAPIv1 { +open class CollectionAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/get-collections-entries - func getCollectionEntries( - _ request: GetCollectionsEntriesRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/get-collections-list - func getCollections( - _ request: GetCollectionsListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/get-collections-show - func getCollection( - _ request: GetCollectionsShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-create - func postCreateCollection( - _ request: PostCollectionsCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-destroy - func postDestroyCollection( - _ request: PostCollectionsDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-add - func postCollectionAddEntry( - _ request: PostCollectionsEntriesAddRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-curate - func postCollectionCurate( - _ request: PostCollectionsEntriesCurateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-move - func postCollectionMoveEntry( - _ request: PostCollectionsEntriesMoveRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-remove - func postCollectionRemoveEntry( - _ request: PostCollectionsEntriesRemoveRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-update - func postCollectionUpdate( - _ request: PostCollectionsUpdateRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: CollectionAPIv1 { - - func getCollectionEntries( + public func getCollectionEntries( _ request: GetCollectionsEntriesRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getCollections( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/get-collections-list + public func getCollections( _ request: GetCollectionsListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getCollection( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/get-collections-show + public func getCollection( _ request: GetCollectionsShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCreateCollection( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-create + public func postCreateCollection( _ request: PostCollectionsCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postDestroyCollection( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-destroy + public func postDestroyCollection( _ request: PostCollectionsDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCollectionAddEntry( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-add + public func postCollectionAddEntry( _ request: PostCollectionsEntriesAddRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCollectionCurate( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-curate + public func postCollectionCurate( _ request: PostCollectionsEntriesCurateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCollectionMoveEntry( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-move + public func postCollectionMoveEntry( _ request: PostCollectionsEntriesMoveRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCollectionRemoveEntry( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-entries-remove + public func postCollectionRemoveEntry( _ request: PostCollectionsEntriesRemoveRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postCollectionUpdate( + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/curate-a-collection/api-reference/post-collections-update + public func postCollectionUpdate( _ request: PostCollectionsUpdateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/APIv1/DirectMessage/DirectMessageAPIv1.swift b/Sources/TwitterAPIKit/APIv1/DirectMessage/DirectMessageAPIv1.swift index af58d0b4..5d584fcd 100644 --- a/Sources/TwitterAPIKit/APIv1/DirectMessage/DirectMessageAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/DirectMessage/DirectMessageAPIv1.swift @@ -1,71 +1,44 @@ import Foundation -public protocol DirectMessageAPIv1 { +open class DirectMessageAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/new-event - func postDirectMessage( - _ request: PostDirectMessageRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/delete-message-event - func deleteDirectMessage( - _ request: DeleteDirectMessageRequestV1 - ) -> TwitterAPISessionDataTask // 204 - No Content - - /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/get-event - func getDirectMessage( - _ request: GetDirectMessageRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events - func getDirectMessageList( - _ request: GetDirectMessageListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-read-receipt - func postDirectMessageMarkRead( - _ request: PostDirectMessagesMarkReadRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-typing-indicator - func postDirectMessageTypingIndicator( - _ request: PostDirectMessagesIndicateTypingRequestV1 - ) -> TwitterAPISessionDataTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: DirectMessageAPIv1 { - public func postDirectMessage( _ request: PostDirectMessageRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/delete-message-event public func deleteDirectMessage( _ request: DeleteDirectMessageRequestV1 - ) -> TwitterAPISessionDataTask { + ) -> TwitterAPISessionDataTask { // 204 - No Content return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/get-event public func getDirectMessage( _ request: GetDirectMessageRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/sending-and-receiving/api-reference/list-events public func getDirectMessageList( _ request: GetDirectMessageListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postDirectMessageMarkRead( + /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-read-receipt + public func postDirectMessageMarkRead( _ request: PostDirectMessagesMarkReadRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) } - func postDirectMessageTypingIndicator( + /// https://developer.twitter.com/en/docs/twitter-api/v1/direct-messages/typing-indicator-and-read-receipts/api-reference/new-typing-indicator + public func postDirectMessageTypingIndicator( _ request: PostDirectMessagesIndicateTypingRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/APIv1/Favorite/FavoriteAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Favorite/FavoriteAPIv1.swift index 12212d9f..8ca109f5 100644 --- a/Sources/TwitterAPIKit/APIv1/Favorite/FavoriteAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Favorite/FavoriteAPIv1.swift @@ -1,39 +1,24 @@ import Foundation -public protocol FavoriteAPIv1 { +open class FavoriteAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-favorites-create - func postFavorite( + public func postFavorite( _ request: PostFavoriteRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-favorites-destroy - func postUnFavorite( - _ request: PostUnFavoriteRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list - func getFavorites( - _ request: GetFavoritesRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: FavoriteAPIv1 { - - public func getFavorites( - _ request: GetFavoritesRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - public func postFavorite( - _ request: PostFavoriteRequestV1 + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-favorites-destroy + public func postUnFavorite( + _ request: PostUnFavoriteRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - public func postUnFavorite( - _ request: PostUnFavoriteRequestV1 + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list + public func getFavorites( + _ request: GetFavoritesRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } diff --git a/Sources/TwitterAPIKit/APIv1/Friendships/FriendshipsAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Friendships/FriendshipsAPIv1.swift index d3d8b898..c088ce28 100644 --- a/Sources/TwitterAPIKit/APIv1/Friendships/FriendshipsAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Friendships/FriendshipsAPIv1.swift @@ -1,137 +1,85 @@ import Foundation -public protocol FriendshipsAPIv1 { +open class FriendshipsAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids - func getFollowerIDs( - _ request: GetFollowersIDsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-list - func getFollowers( - _ request: GetFollowersListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids - func getFriendIDs( - _ request: GetFriendsIDsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-list - func getFriends( - _ request: GetFriendsListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming - func getFriendshipsIncoming( - _ request: GetFriendshipsIncomingRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup - func getFriendshipsLookup( - _ request: GetFriendshipsLookupRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids - func getFriendshipsNoRetweetsIDs( - _ request: GetFriendshipsNoRetweetsIDsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing - func getFriendshipsOutgoing( - _ request: GetFriendshipsOutgoingRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show - func getFriendships( - _ request: GetFriendshipsShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create - func postFollowUser( - _ request: PostFriendshipsCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy - func postUnfollowUser( - _ request: PostFriendshipsDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update - func postFriendshipsUpdate( - _ request: PostFriendshipsUpdateRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: FriendshipsAPIv1 { - public func getFollowerIDs( _ request: GetFollowersIDsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-followers-list public func getFollowers( _ request: GetFollowersListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids public func getFriendIDs( _ request: GetFriendsIDsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friends-list public func getFriends( _ request: GetFriendsListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming public func getFriendshipsIncoming( _ request: GetFriendshipsIncomingRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup public func getFriendshipsLookup( _ request: GetFriendshipsLookupRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids public func getFriendshipsNoRetweetsIDs( _ request: GetFriendshipsNoRetweetsIDsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing public func getFriendshipsOutgoing( _ request: GetFriendshipsOutgoingRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show public func getFriendships( _ request: GetFriendshipsShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create public func postFollowUser( _ request: PostFriendshipsCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy public func postUnfollowUser( _ request: PostFriendshipsDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update public func postFriendshipsUpdate( _ request: PostFriendshipsUpdateRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Geo/GeoAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Geo/GeoAPIv1.swift index c17ff79f..d1236cd6 100644 --- a/Sources/TwitterAPIKit/APIv1/Geo/GeoAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Geo/GeoAPIv1.swift @@ -1,38 +1,22 @@ import Foundation -public protocol GeoAPIv1 { +open class GeoAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-reverse_geocode - func getReverseGeocode( - _ request: GetGeoReverseGeocodeRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/geo/place-information/api-reference/get-geo-id-place_id - func getGeoPlace( - _ request: GetGeoPlaceIDRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-search - func searchGeo( - _ request: GetGeoSearchRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: GeoAPIv1 { - public func getReverseGeocode( _ request: GetGeoReverseGeocodeRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/geo/place-information/api-reference/get-geo-id-place_id public func getGeoPlace( _ request: GetGeoPlaceIDRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/geo/places-near-location/api-reference/get-geo-search public func searchGeo( _ request: GetGeoSearchRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Help/HelpAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Help/HelpAPIv1.swift index 76440511..2880ab24 100644 --- a/Sources/TwitterAPIKit/APIv1/Help/HelpAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Help/HelpAPIv1.swift @@ -1,15 +1,9 @@ import Foundation -public protocol HelpAPIv1 { +open class HelpAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/developer-utilities/supported-languages/api-reference/get-help-languages - func getSupportedLanguages( - _ request: GetHelpLanguagesRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: HelpAPIv1 { - func getSupportedLanguages( + public func getSupportedLanguages( _ request: GetHelpLanguagesRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/APIv1/List/ListAPIv1.swift b/Sources/TwitterAPIKit/APIv1/List/ListAPIv1.swift index 675394d7..895ad889 100644 --- a/Sources/TwitterAPIKit/APIv1/List/ListAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/List/ListAPIv1.swift @@ -1,214 +1,134 @@ import Foundation -public protocol ListAPIv1 { +open class ListAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-list - func getLists( - _ request: GetListsListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members - func getListMembers( - _ request: GetListsMembersRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show - func getListMember( - _ request: GetListsMembersShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships - func getListMemberships( - _ request: GetListsMembershipsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships - func getListOwnerships( - _ request: GetListsOwnershipsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-show - func getList( - _ request: GetListsShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses - func getListStatuses( - _ request: GetListsStatusesRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers - func getListSubscribers( - _ request: GetListsSubscribersRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers-show - func getListSubscriber( - _ request: GetListsSubscribersShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions - func getListSubscriptions( - _ request: GetListsSubscriptionsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-create - func postCreateList( - _ request: PostListsCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy - func postDestroyList( - _ request: PostListsDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create - func postAddListMember( - _ request: PostListsMembersCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all - func postAddListMembers( - _ request: PostListsMembersCreateAllRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy - func postRemoveListMember( - _ request: PostListsMembersDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all - func postRemoveListMembers( - _ request: PostListsMembersDestroyAllRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-create - func postSubscribeList( - _ request: PostListsSubscribersCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-destroy - func postUnsubscribeList( - _ request: PostListsSubscribersDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-update - func postUpdateList( - _ request: PostListsUpdateRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: ListAPIv1 { - public func getLists( _ request: GetListsListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members public func getListMembers( _ request: GetListsMembersRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show public func getListMember( _ request: GetListsMembersShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships public func getListMemberships( _ request: GetListsMembershipsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships public func getListOwnerships( _ request: GetListsOwnershipsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-show public func getList( _ request: GetListsShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses public func getListStatuses( _ request: GetListsStatusesRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers public func getListSubscribers( _ request: GetListsSubscribersRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscribers-show public func getListSubscriber( _ request: GetListsSubscribersShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions public func getListSubscriptions( _ request: GetListsSubscriptionsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-create public func postCreateList( _ request: PostListsCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy public func postDestroyList( _ request: PostListsDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create public func postAddListMember( _ request: PostListsMembersCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all public func postAddListMembers( _ request: PostListsMembersCreateAllRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy public func postRemoveListMember( _ request: PostListsMembersDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all public func postRemoveListMembers( _ request: PostListsMembersDestroyAllRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-create public func postSubscribeList( _ request: PostListsSubscribersCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-subscribers-destroy public func postUnsubscribeList( _ request: PostListsSubscribersDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/post-lists-update public func postUpdateList( _ request: PostListsUpdateRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Media/MediaAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Media/MediaAPIv1.swift index 7c91c063..d19ab603 100644 --- a/Sources/TwitterAPIKit/APIv1/Media/MediaAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Media/MediaAPIv1.swift @@ -1,106 +1,33 @@ import Foundation -public protocol MediaAPIv1 { +open class MediaAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/get-media-upload-status - func getUploadMediaStatus( - _ request: GetUploadMediaStatusRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-init - func uploadMediaInit( - _ request: UploadMediaInitRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-append - func uploadMediaAppend( - _ request: UploadMediaAppendRequestV1 - ) -> TwitterAPISessionJSONTask - - /// Utility method for split uploading of large files. - func uploadMediaAppendSplitChunks( - _ request: UploadMediaAppendRequestV1, - maxBytes: Int - ) -> [TwitterAPISessionSpecializedTask] - - func uploadMediaAppendSplitChunks( - _ request: UploadMediaAppendRequestV1 - ) -> [TwitterAPISessionSpecializedTask] - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-finalize - func uploadMediaFinalize( - _ request: UploadMediaFinalizeRequestV1 - ) -> TwitterAPISessionJSONTask - - /// Upload media utility method. - /// INIT -> APPEND x n -> FINALIZE -> STATUS x n (If needed) - func uploadMedia( - _ parameters: UploadMediaRequestParameters, - completionHandler: @escaping ( - TwitterAPIResponse - ) -> Void - ) - - func waitMediaProcessing( - mediaID: String, - initialWaitSec: Int, - completionHandler: @escaping ( - TwitterAPIResponse - ) -> Void - ) - - func waitMediaProcessing( - mediaID: String, - completionHandler: @escaping ( - TwitterAPIResponse - ) -> Void - ) - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-metadata-create - func createMediaMetadata( - _ request: PostMediaMetadataCreateRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-create - func createSubtitle( - _ request: PostMediaSubtitlesCreateRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-delete - func deleteSubtitle( - _ request: PostMediaSubtitlesDeleteRequestV1 - ) -> TwitterAPISessionDataTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: MediaAPIv1 { - public func getUploadMediaStatus( _ request: GetUploadMediaStatusRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-init public func uploadMediaInit( _ request: UploadMediaInitRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-append public func uploadMediaAppend( _ request: UploadMediaAppendRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func uploadMediaAppendSplitChunks( - _ request: UploadMediaAppendRequestV1 - ) -> [TwitterAPISessionSpecializedTask] { - return uploadMediaAppendSplitChunks(request, maxBytes: 5_242_880 /* 5MB */) - } - - func uploadMediaAppendSplitChunks( - _ request: UploadMediaAppendRequestV1, maxBytes: Int - ) -> [TwitterAPISessionSpecializedTask] { + /// Utility method for split uploading of large files. + public func uploadMediaAppendSplitChunks( + _ request: UploadMediaAppendRequestV1, + maxBytes: Int = 5_242_880 /* 5MB */ + ) -> [TwitterAPISessionSpecializedTask] { let tasks = request.segments(maxBytes: maxBytes) .map { req in @@ -108,16 +35,18 @@ extension TwitterAPIClient.TwitterAPIImplV1: MediaAPIv1 { req.mediaID } } - return tasks } + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload-finalize public func uploadMediaFinalize( _ request: UploadMediaFinalizeRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// Upload media utility method. + /// INIT -> APPEND x n -> FINALIZE -> STATUS x n (If needed) public func uploadMedia( _ parameters: UploadMediaRequestParameters, completionHandler: @escaping ( @@ -252,15 +181,24 @@ extension TwitterAPIClient.TwitterAPIImplV1: MediaAPIv1 { } } - func createMediaMetadata(_ request: PostMediaMetadataCreateRequestV1) -> TwitterAPISessionDataTask { + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-metadata-create + public func createMediaMetadata( + _ request: PostMediaMetadataCreateRequestV1 + ) -> TwitterAPISessionDataTask { return session.send(request) } - func createSubtitle(_ request: PostMediaSubtitlesCreateRequestV1) -> TwitterAPISessionDataTask { + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-create + public func createSubtitle( + _ request: PostMediaSubtitlesCreateRequestV1 + ) -> TwitterAPISessionDataTask { return session.send(request) } - func deleteSubtitle(_ request: PostMediaSubtitlesDeleteRequestV1) -> TwitterAPISessionDataTask { + /// https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-subtitles-delete + public func deleteSubtitle( + _ request: PostMediaSubtitlesDeleteRequestV1 + ) -> TwitterAPISessionDataTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv1/Retweet/RetweetAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Retweet/RetweetAPIv1.swift index a5e9d3c5..28523da1 100644 --- a/Sources/TwitterAPIKit/APIv1/Retweet/RetweetAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Retweet/RetweetAPIv1.swift @@ -1,58 +1,36 @@ import Foundation -public protocol RetweetAPIv1 { +open class RetweetAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-retweet-id - func postRetweet( - _ request: PostRetweetRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-unretweet-id - func postUnRetweet( - _ request: PostUnRetweetRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweets-id - func getRetweets( - _ request: GetRetweetsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweets_of_me - func getRetweetsOfMe( - _ request: GetRetweetsOfMeRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweeters-ids - func getRetweeters( - _ request: GetRetweetersRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: RetweetAPIv1 { public func postRetweet( _ request: PostRetweetRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-unretweet-id public func postUnRetweet( _ request: PostUnRetweetRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweets-id public func getRetweets( _ request: GetRetweetsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweets_of_me public func getRetweetsOfMe( _ request: GetRetweetsOfMeRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-retweeters-ids public func getRetweeters( _ request: GetRetweetersRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Search/SearchAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Search/SearchAPIv1.swift index 61d43b0b..acc09f06 100644 --- a/Sources/TwitterAPIKit/APIv1/Search/SearchAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Search/SearchAPIv1.swift @@ -1,49 +1,29 @@ import Foundation -public protocol SearchAPIv1 { +open class SearchAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/api-reference/get-search-tweets - func searchTweets( - _ request: GetSearchTweetsRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-saved_searches-list - func getSavedSearches( - _ request: GetSavedSearchesListRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-saved_searches-create - func postCreateSavedSearch( - _ request: PostSavedSearchesCreateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-saved_searches-destroy-id - func postDestroySavedSearch( - _ request: PostSavedSearchesCreateRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: SearchAPIv1 { - public func searchTweets( _ request: GetSearchTweetsRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-saved_searches-list public func getSavedSearches( _ request: GetSavedSearchesListRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-saved_searches-create public func postCreateSavedSearch( _ request: PostSavedSearchesCreateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/post-saved_searches-destroy-id public func postDestroySavedSearch( _ request: PostSavedSearchesCreateRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Timelines/TimelineAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Timelines/TimelineAPIv1.swift index 5c3e5610..e477a2c7 100644 --- a/Sources/TwitterAPIKit/APIv1/Timelines/TimelineAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Timelines/TimelineAPIv1.swift @@ -1,42 +1,26 @@ import Foundation /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/overview -public protocol TimelineAPIv1 { +open class TimelineAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-home_timeline - func getHomeTimeline( - _ request: GetStatusesHomeTimelineRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-mentions_timeline - func getMentionsTimeline( - _ request: GetStatusesMentionsTimelineRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline - func getUserTimeline( - _ request: GetStatusesUserTimelineRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: TimelineAPIv1 { public func getHomeTimeline( _ request: GetStatusesHomeTimelineRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-mentions_timeline public func getMentionsTimeline( _ request: GetStatusesMentionsTimelineRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/timelines/api-reference/get-statuses-user_timeline public func getUserTimeline( _ request: GetStatusesUserTimelineRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } - } diff --git a/Sources/TwitterAPIKit/APIv1/Trend/TrendAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Trend/TrendAPIv1.swift index 2646fe54..14e3fa0b 100644 --- a/Sources/TwitterAPIKit/APIv1/Trend/TrendAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Trend/TrendAPIv1.swift @@ -1,38 +1,22 @@ import Foundation -public protocol TrendAPIv1 { +open class TrendAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-available - func getTrendsAvailable( - _ request: GetTrendsAvailableRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-closest - func getTrendsClosest( - _ request: GetTrendsClosestRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/trends/trends-for-location/api-reference/get-trends-place - func getTrends( - _ request: GetTrendsPlaceRequestV1 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV1: TrendAPIv1 { - public func getTrendsAvailable( _ request: GetTrendsAvailableRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/trends/locations-with-trending-topics/api-reference/get-trends-closest public func getTrendsClosest( _ request: GetTrendsClosestRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/trends/trends-for-location/api-reference/get-trends-place public func getTrends( _ request: GetTrendsPlaceRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv1/Tweet/TweetAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Tweet/TweetAPIv1.swift index 94d78fff..94d06540 100644 --- a/Sources/TwitterAPIKit/APIv1/Tweet/TweetAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Tweet/TweetAPIv1.swift @@ -1,54 +1,35 @@ import Foundation -public protocol TweetAPIv1 { +open class TweetAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-update - func postUpdateStatus( - _ request: PostStatusesUpdateRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-destroy-id - func postDestroyStatus( - _ request: PostStatusesDestroyRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-show-id - func getShowStatus( - _ request: GetStatusesShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-lookup - func getLookupStatuses( - _ request: GetStatusesLookupRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-oembed - // TODO↑ -} - -extension TwitterAPIClient.TwitterAPIImplV1: TweetAPIv1 { - public func postUpdateStatus( _ request: PostStatusesUpdateRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/post-statuses-destroy-id public func postDestroyStatus( _ request: PostStatusesDestroyRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-show-id public func getShowStatus( _ request: GetStatusesShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-lookup public func getLookupStatuses( _ request: GetStatusesLookupRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + + /// https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-oembed + // TODO↑ } diff --git a/Sources/TwitterAPIKit/APIv1/TwitterAPIv1.swift b/Sources/TwitterAPIKit/APIv1/TwitterAPIv1.swift index 6a07724f..dd47ea0d 100644 --- a/Sources/TwitterAPIKit/APIv1/TwitterAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/TwitterAPIv1.swift @@ -1,61 +1,39 @@ -public typealias TwitterAPIv1 = - TwitterAPIResourceV1 - // sorted - & AccountAPIv1 - & ApplicationAPIv1 - & BlockAndMuteAPIv1 - & CollectionAPIv1 - & DirectMessageAPIv1 - & FavoriteAPIv1 - & FriendshipsAPIv1 - & GeoAPIv1 - & HelpAPIv1 - & ListAPIv1 - & MediaAPIv1 - & RetweetAPIv1 - & SearchAPIv1 - & TimelineAPIv1 - & TrendAPIv1 - & TweetAPIv1 - & UserAPIv1 +open class TwitterAPIv1 { + public let account: AccountAPIv1 + public let application: ApplicationAPIv1 + public let blockAndMute: BlockAndMuteAPIv1 + public let collection: CollectionAPIv1 + public let directMessage: DirectMessageAPIv1 + public let favorite: FavoriteAPIv1 + public let friendships: FriendshipsAPIv1 + public let geo: GeoAPIv1 + public let help: HelpAPIv1 + public let list: ListAPIv1 + public let media: MediaAPIv1 + public let retweet: RetweetAPIv1 + public let search: SearchAPIv1 + public let timeline: TimelineAPIv1 + public let trend: TrendAPIv1 + public let tweet: TweetAPIv1 + public let user: UserAPIv1 -public protocol TwitterAPIResourceV1 { - var account: AccountAPIv1 { get } - var application: ApplicationAPIv1 { get } - var blockAndMute: BlockAndMuteAPIv1 { get } - var collection: CollectionAPIv1 { get } - var directMessage: DirectMessageAPIv1 { get } - var favorite: FavoriteAPIv1 { get } - var friendships: FriendshipsAPIv1 { get } - var geo: GeoAPIv1 { get } - var help: HelpAPIv1 { get } - var list: ListAPIv1 { get } - var media: MediaAPIv1 { get } - var retweet: RetweetAPIv1 { get } - var search: SearchAPIv1 { get } - var timeline: TimelineAPIv1 { get } - var trend: TrendAPIv1 { get } - var tweet: TweetAPIv1 { get } - var user: UserAPIv1 { get } - -} - -extension TwitterAPIClient.TwitterAPIImplV1: TwitterAPIResourceV1 { - var account: AccountAPIv1 { return self } - var application: ApplicationAPIv1 { return self } - var blockAndMute: BlockAndMuteAPIv1 { return self } - var collection: CollectionAPIv1 { return self } - var directMessage: DirectMessageAPIv1 { return self } - var favorite: FavoriteAPIv1 { return self } - var friendships: FriendshipsAPIv1 { return self } - var geo: GeoAPIv1 { return self } - var help: HelpAPIv1 { return self } - var list: ListAPIv1 { return self } - var media: MediaAPIv1 { return self } - var retweet: RetweetAPIv1 { return self } - var search: SearchAPIv1 { return self } - var timeline: TimelineAPIv1 { return self } - var trend: TrendAPIv1 { return self } - var tweet: TweetAPIv1 { return self } - var user: UserAPIv1 { return self } + public init(session: TwitterAPISession) { + account = .init(session: session) + application = .init(session: session) + blockAndMute = .init(session: session) + collection = .init(session: session) + directMessage = .init(session: session) + favorite = .init(session: session) + friendships = .init(session: session) + geo = .init(session: session) + help = .init(session: session) + list = .init(session: session) + media = .init(session: session) + retweet = .init(session: session) + search = .init(session: session) + timeline = .init(session: session) + trend = .init(session: session) + tweet = .init(session: session) + user = .init(session: session) + } } diff --git a/Sources/TwitterAPIKit/APIv1/Users/UserAPIv1.swift b/Sources/TwitterAPIKit/APIv1/Users/UserAPIv1.swift index c250af32..1f144164 100644 --- a/Sources/TwitterAPIKit/APIv1/Users/UserAPIv1.swift +++ b/Sources/TwitterAPIKit/APIv1/Users/UserAPIv1.swift @@ -1,48 +1,29 @@ import Foundation -public protocol UserAPIv1 { +open class UserAPIv1: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup - func getUsers( - _ request: GetUsersLookupRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-show - func getUser( - _ request: GetUsersShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-search - func searchUser( - _ request: GetUsersShowRequestV1 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-users-profile_banner - func getUserProfileBanner( - _ request: GetUsersProfileBannerRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV1: UserAPIv1 { - public func getUsers( _ request: GetUsersLookupRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-show public func getUser( _ request: GetUsersShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/get-users-search public func searchUser( _ request: GetUsersShowRequestV1 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-users-profile_banner public func getUserProfileBanner( _ request: GetUsersProfileBannerRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv2/BlockAndMute/BlockAndMuteAPIv2.swift b/Sources/TwitterAPIKit/APIv2/BlockAndMute/BlockAndMuteAPIv2.swift index 0db6fba5..bd595b09 100644 --- a/Sources/TwitterAPIKit/APIv2/BlockAndMute/BlockAndMuteAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/BlockAndMute/BlockAndMuteAPIv2.swift @@ -1,61 +1,46 @@ import Foundation -public protocol BlockAndMuteAPIv2 { +open class BlockAndMuteAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/get-users-blocking - func getBlockUsers( + public func getBlockUsers( _ request: GetUsersBlockingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/post-users-user_id-blocking - func blockUser( - _ request: PostUsersBlockingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/delete-users-user_id-blocking - func unblockUser( - _ request: DeleteUsersBlockingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/get-users-muting - func getMuteUsers( - _ request: GetUsersMutingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/post-users-user_id-muting - func muteUser( - _ request: PostUsersMutingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/delete-users-user_id-muting - func unmuteUser( - _ request: DeleteUsersMutingRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: BlockAndMuteAPIv2 { - - func getBlockUsers(_ request: GetUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func blockUser(_ request: PostUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/post-users-user_id-blocking + public func blockUser( + _ request: PostUsersBlockingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func unblockUser(_ request: DeleteUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/blocks/api-reference/delete-users-user_id-blocking + public func unblockUser( + _ request: DeleteUsersBlockingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getMuteUsers(_ request: GetUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/get-users-muting + public func getMuteUsers( + _ request: GetUsersMutingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func muteUser(_ request: PostUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/post-users-user_id-muting + public func muteUser( + _ request: PostUsersMutingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func unmuteUser(_ request: DeleteUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/mutes/api-reference/delete-users-user_id-muting + public func unmuteUser( + _ request: DeleteUsersMutingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Bookmarks/BookmarksAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Bookmarks/BookmarksAPIv2.swift index a56ba9d4..13e94fa2 100644 --- a/Sources/TwitterAPIKit/APIv2/Bookmarks/BookmarksAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Bookmarks/BookmarksAPIv2.swift @@ -1,34 +1,25 @@ import Foundation -public protocol BookmarksAPIv2 { +open class BookmarksAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/get-users-id-bookmarks - func getBookmarks( + public func getBookmarks( _ request: GetUsersBookmarksRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/post-users-id-bookmarks - func createBookmark( - _ request: PostUsersBookmarksRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/delete-users-id-bookmarks-tweet_id - func deleteBookmark( - _ request: DeleteUsersBookmarksRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: BookmarksAPIv2 { - - func getBookmarks(_ request: GetUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func createBookmark(_ request: PostUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/post-users-id-bookmarks + public func createBookmark( + _ request: PostUsersBookmarksRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func deleteBookmark(_ request: DeleteUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/delete-users-id-bookmarks-tweet_id + public func deleteBookmark( + _ request: DeleteUsersBookmarksRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Compliance/ComplianceAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Compliance/ComplianceAPIv2.swift index d0b667a9..514c47d9 100644 --- a/Sources/TwitterAPIKit/APIv2/Compliance/ComplianceAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Compliance/ComplianceAPIv2.swift @@ -1,34 +1,25 @@ import Foundation -public protocol ComplianceAPIv2 { +open class ComplianceAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs-id - func getComplianceJob( + public func getComplianceJob( _ request: GetComplianceJobRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs - func getComplianceJobj( - _ request: GetComplianceJobsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs - func createComplianceJob( - _ request: PostComplianceJobsRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: ComplianceAPIv2 { - - func getComplianceJob(_ request: GetComplianceJobRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getComplianceJobj(_ request: GetComplianceJobsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/get-compliance-jobs + public func getComplianceJobj( + _ request: GetComplianceJobsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func createComplianceJob(_ request: PostComplianceJobsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/compliance/batch-compliance/api-reference/post-compliance-jobs + public func createComplianceJob( + _ request: PostComplianceJobsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Friendships/FriendshipsAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Friendships/FriendshipsAPIv2.swift index 81eb3fc6..68ff906e 100644 --- a/Sources/TwitterAPIKit/APIv2/Friendships/FriendshipsAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Friendships/FriendshipsAPIv2.swift @@ -1,42 +1,31 @@ import Foundation -public protocol FriendshipsAPIv2 { +open class FriendshipsAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-following - func getFollowing( + public func getFollowing( _ request: GetUsersFollowingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-followers - func getFollowers( - _ request: GetUsersFollowersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/post-users-source_user_id-following - func follow( - _ request: PostUsersFollowingRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/delete-users-source_id-following - func unfollow( - _ request: DeleteUsersFollowingRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: FriendshipsAPIv2 { - - func getFollowing(_ request: GetUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getFollowers(_ request: GetUsersFollowersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-followers + public func getFollowers( + _ request: GetUsersFollowersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func follow(_ request: PostUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/post-users-source_user_id-following + public func follow( + _ request: PostUsersFollowingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func unfollow(_ request: DeleteUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/delete-users-source_id-following + public func unfollow( + _ request: DeleteUsersFollowingRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Like/LikeAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Like/LikeAPIv2.swift index 067223c0..7daf5b20 100644 --- a/Sources/TwitterAPIKit/APIv2/Like/LikeAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Like/LikeAPIv2.swift @@ -1,48 +1,29 @@ import Foundation -public protocol LikeAPIv2 { +open class LikeAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/get-tweets-id-liking_users - func getLikingUsers( - _ request: GetTweetsLikingUsersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/get-users-id-liked_tweets - func getLikedTweets( - _ request: GetUsersLikedTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/post-users-id-likes - func postLike( - _ request: PostUsersLikesRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/delete-users-id-likes-tweet_id - func deleteLike( - _ request: DeleteUsersLikesRequestV2 - ) -> TwitterAPISessionJSONTask - -} - -extension TwitterAPIClient.TwitterAPIImplV2: LikeAPIv2 { public func getLikingUsers( _ request: GetTweetsLikingUsersRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/get-users-id-liked_tweets public func getLikedTweets( _ request: GetUsersLikedTweetsRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/post-users-id-likes public func postLike( _ request: PostUsersLikesRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/likes/api-reference/delete-users-id-likes-tweet_id public func deleteLike( _ request: DeleteUsersLikesRequestV2 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv2/List/ListAPIv2.swift b/Sources/TwitterAPIKit/APIv2/List/ListAPIv2.swift index 5c8361ea..e762cc3d 100644 --- a/Sources/TwitterAPIKit/APIv2/List/ListAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/List/ListAPIv2.swift @@ -1,160 +1,123 @@ import Foundation -public protocol ListAPIv2 { +open class ListAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/lists/list-tweets/api-reference/get-lists-id-tweets - func getListTweets( + public func getListTweets( _ request: GetListsTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-lists-id - func getList( - _ request: GetListRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-users-id-owned_lists - func getLists( - _ request: GetUsersOwnedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/post-users-id-followed-lists - func followList( - _ request: PostUsersFollowedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/delete-users-id-followed-lists-list_id - func unfollowList( - _ request: DeleteUsersFollowedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-lists-id-followers - func listFollowers( - _ request: GetListsFollowersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-users-id-followed_lists - func followedLists( - _ request: GetUsersFollowedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/post-lists-id-members - func addListMember( - _ request: PostListsMembersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/delete-lists-id-members-user_id - func removeListMember( - _ request: DeleteListsMembersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-users-id-list_memberships - func getListMemberships( - _ request: GetUsersListMembershipsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-lists-id-members - func getListMembers( - _ request: GetListsMembersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists - func createList( - _ request: PostListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/put-lists-id - func updateList( - _ request: PutListRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id - func deleteList( - _ request: DeleteListRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/get-users-id-pinned_lists - func pinnedList( - _ request: GetUsersPinnedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/post-users-id-pinned-lists - func pinList( - _ request: PostUsersPinnedListsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/delete-users-id-pinned-lists-list_id - func unpinList( - _ request: DeleteUsersPinnedListsRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: ListAPIv2 { - - func getListTweets(_ request: GetListsTweetsRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getList(_ request: GetListRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-lists-id + public func getList( + _ request: GetListRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getLists(_ request: GetUsersOwnedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-lookup/api-reference/get-users-id-owned_lists + public func getLists( + _ request: GetUsersOwnedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func followList(_ request: PostUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/post-users-id-followed-lists + public func followList( + _ request: PostUsersFollowedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func unfollowList(_ request: DeleteUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/delete-users-id-followed-lists-list_id + public func unfollowList( + _ request: DeleteUsersFollowedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func listFollowers(_ request: GetListsFollowersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-lists-id-followers + public func listFollowers( + _ request: GetListsFollowersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func followedLists(_ request: GetUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-follows/api-reference/get-users-id-followed_lists + public func followedLists( + _ request: GetUsersFollowedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func addListMember(_ request: PostListsMembersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/post-lists-id-members + public func addListMember( + _ request: PostListsMembersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func removeListMember(_ request: DeleteListsMembersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/delete-lists-id-members-user_id + public func removeListMember( + _ request: DeleteListsMembersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getListMemberships(_ request: GetUsersListMembershipsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-users-id-list_memberships + public func getListMemberships( + _ request: GetUsersListMembershipsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getListMembers(_ request: GetListsMembersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/list-members/api-reference/get-lists-id-members + public func getListMembers( + _ request: GetListsMembersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func createList(_ request: PostListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/post-lists + public func createList( + _ request: PostListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func updateList(_ request: PutListRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/put-lists-id + public func updateList( + _ request: PutListRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func deleteList(_ request: DeleteListRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/manage-lists/api-reference/delete-lists-id + public func deleteList( + _ request: DeleteListRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func pinnedList(_ request: GetUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/get-users-id-pinned_lists + public func pinnedList( + _ request: GetUsersPinnedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func pinList(_ request: PostUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/post-users-id-pinned-lists + public func pinList( + _ request: PostUsersPinnedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func unpinList(_ request: DeleteUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/lists/pinned-lists/api-reference/delete-users-id-pinned-lists-list_id + public func unpinList( + _ request: DeleteUsersPinnedListsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Retweet/RetweetAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Retweet/RetweetAPIv2.swift index 774ec769..568f8265 100644 --- a/Sources/TwitterAPIKit/APIv2/Retweet/RetweetAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Retweet/RetweetAPIv2.swift @@ -1,37 +1,22 @@ import Foundation -public protocol RetweetAPIv2 { +open class RetweetAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/get-tweets-id-retweeted_by - func getRetweetedBy( - _ request: GetTweetsRetweetedByRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/post-users-id-retweets - func postRetweet( - _ request: PostUsersRetweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/delete-users-id-retweets-tweet_id - func deleteRetweet( - _ request: DeleteUsersRetweetsRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: RetweetAPIv2 { - public func getRetweetedBy( _ request: GetTweetsRetweetedByRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/post-users-id-retweets public func postRetweet( _ request: PostUsersRetweetsRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/retweets/api-reference/delete-users-id-retweets-tweet_id public func deleteRetweet( _ request: DeleteUsersRetweetsRequestV2 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/APIv2/Search/SearchAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Search/SearchAPIv2.swift index 7ef0d346..feaad5f8 100644 --- a/Sources/TwitterAPIKit/APIv2/Search/SearchAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Search/SearchAPIv2.swift @@ -1,26 +1,19 @@ import Foundation -public protocol SearchAPIv2 { +open class SearchAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent - func searchTweetsRecent( + public func searchTweetsRecent( _ request: GetTweetsSearchRecentRequestV2 - ) -> TwitterAPISessionJSONTask + ) -> TwitterAPISessionJSONTask { + return session.send(request) + } /// https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-all /// - Important: This endpoint is only available to those users who have been approved for Academic Research access. - func searchTweetsAll( + public func searchTweetsAll( _ request: GetTweetsSearchAllRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: SearchAPIv2 { - - func searchTweetsRecent(_ request: GetTweetsSearchRecentRequestV2) -> TwitterAPISessionJSONTask { - return session.send(request) - } - - func searchTweetsAll(_ request: GetTweetsSearchAllRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Spaces/SpacesAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Spaces/SpacesAPIv2.swift index 1a777005..fa80a1b6 100644 --- a/Sources/TwitterAPIKit/APIv2/Spaces/SpacesAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Spaces/SpacesAPIv2.swift @@ -1,61 +1,46 @@ import Foundation -public protocol SpacesAPIv2 { +open class SpacesAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id - func getSpace( + public func getSpace( _ request: GetSpaceRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces - func getSpaces( - _ request: GetSpacesRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-by-creator-ids - func getSpacesByCreators( - _ request: GetSpacesByCreatorIDsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-buyers - func getSpacesBuyers( - _ request: GetSpacesBuyersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-tweets - func getSPacesTweets( - _ request: GetSpacesTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/spaces/search/api-reference/get-spaces-search - func searchSpaces( - _ request: GetSpacesSearchRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: SpacesAPIv2 { - - func getSpace(_ request: GetSpaceRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getSpaces(_ request: GetSpacesRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces + public func getSpaces( + _ request: GetSpacesRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getSpacesByCreators(_ request: GetSpacesByCreatorIDsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-by-creator-ids + public func getSpacesByCreators( + _ request: GetSpacesByCreatorIDsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getSpacesBuyers(_ request: GetSpacesBuyersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-buyers + public func getSpacesBuyers( + _ request: GetSpacesBuyersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getSPacesTweets(_ request: GetSpacesTweetsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/api-reference/get-spaces-id-tweets + public func getSPacesTweets( + _ request: GetSpacesTweetsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func searchSpaces(_ request: GetSpacesSearchRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/spaces/search/api-reference/get-spaces-search + public func searchSpaces( + _ request: GetSpacesSearchRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Stream/StreamAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Stream/StreamAPIv2.swift index 4263ef25..8d3ec0c7 100644 --- a/Sources/TwitterAPIKit/APIv2/Stream/StreamAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Stream/StreamAPIv2.swift @@ -1,47 +1,32 @@ import Foundation -public protocol StreamAPIv2 { +open class StreamAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/api-reference/get-tweets-sample-stream - func sampleStream( + public func sampleStream( _ request: GetTweetsSampleStreamRequestV2 - ) -> TwitterAPISessionStreamTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream-rules - func getSearchStreamRules( - _ request: GetTweetsSearchStreamRulesRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/post-tweets-search-stream-rules#Validate - func postSearchStreamRules( - _ request: PostTweetsSearchStreamRulesRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream - func searchStream( - _ request: GetTweetsSearchStreamRequestV2 - ) -> TwitterAPISessionStreamTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: StreamAPIv2 { - - func sampleStream(_ request: GetTweetsSampleStreamRequestV2) -> TwitterAPISessionStreamTask { + ) -> TwitterAPISessionStreamTask { return session.send(streamRequest: request) } - func getSearchStreamRules( + /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream-rules + public func getSearchStreamRules( _ request: GetTweetsSearchStreamRulesRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postSearchStreamRules( + /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/post-tweets-search-stream-rules#Validate + public func postSearchStreamRules( _ request: PostTweetsSearchStreamRulesRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func searchStream(_ request: GetTweetsSearchStreamRequestV2) -> TwitterAPISessionStreamTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/api-reference/get-tweets-search-stream + public func searchStream( + _ request: GetTweetsSearchStreamRequestV2 + ) -> TwitterAPISessionStreamTask { return session.send(streamRequest: request) } } diff --git a/Sources/TwitterAPIKit/APIv2/Timeline/TimelineAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Timeline/TimelineAPIv2.swift index e76a9787..ae73719e 100644 --- a/Sources/TwitterAPIKit/APIv2/Timeline/TimelineAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Timeline/TimelineAPIv2.swift @@ -1,39 +1,24 @@ import Foundation -public protocol TimelineAPIv2 { +open class TimelineAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-tweets - func getUserTweets( - _ request: GetUsersTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-mentions - func getUserMensions( - _ request: GetUsersMentionsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// a.k.a Home Timeline - /// https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-reverse-chronological - func getUserReverseChronological( - _ request: GetUsersTimelinesReverseChronologicalRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: TimelineAPIv2 { - public func getUserTweets( _ request: GetUsersTweetsRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } + /// https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-mentions public func getUserMensions( _ request: GetUsersMentionsRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getUserReverseChronological( + /// a.k.a Home Timeline + /// https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-reverse-chronological + public func getUserReverseChronological( _ request: GetUsersTimelinesReverseChronologicalRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/APIv2/Tweet/TweetAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Tweet/TweetAPIv2.swift index f439c0f2..d6b10036 100644 --- a/Sources/TwitterAPIKit/APIv2/Tweet/TweetAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Tweet/TweetAPIv2.swift @@ -1,60 +1,45 @@ import Foundation -public protocol TweetAPIv2 { +open class TweetAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets - func getTweets( + public func getTweets( _ request: GetTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets-id - func getTweet( - _ request: GetTweetRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets - func getQuoteTweets( - _ request: GetTweetsQuoteTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/delete-tweets-id - func deleteTweet( - _ request: DeleteTweetRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets - func postTweet( - _ request: PostTweetsRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/hide-replies/api-reference/put-tweets-id-hidden - func hideReply( - _ request: PutTweetsHiddenRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: TweetAPIv2 { - - public func getTweets(_ request: GetTweetsRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - public func getTweet(_ request: GetTweetRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets-id + public func getTweet( + _ request: GetTweetRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getQuoteTweets(_ request: GetTweetsQuoteTweetsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/quote-tweets/api-reference/get-tweets-id-quote_tweets + public func getQuoteTweets( + _ request: GetTweetsQuoteTweetsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func deleteTweet(_ request: DeleteTweetRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/delete-tweets-id + public func deleteTweet( + _ request: DeleteTweetRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func postTweet(_ request: PostTweetsRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets + public func postTweet( + _ request: PostTweetsRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func hideReply(_ request: PutTweetsHiddenRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/tweets/hide-replies/api-reference/put-tweets-id-hidden + public func hideReply( + _ request: PutTweetsHiddenRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/APIv2/TweetCount/TweetCountAPIv2.swift b/Sources/TwitterAPIKit/APIv2/TweetCount/TweetCountAPIv2.swift index f774b96c..6ed53156 100644 --- a/Sources/TwitterAPIKit/APIv2/TweetCount/TweetCountAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/TweetCount/TweetCountAPIv2.swift @@ -1,26 +1,16 @@ import Foundation -public protocol TweetCountAPIv2 { +open class TweetCountAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-recent - func getTweetCountRecent( - _ request: GetTweetsCountsRecentRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-all - /// - Important: This endpoint is only available to those users who have been approved for Academic Research access. - func getTweetCountAll( - _ request: GetTweetsCountsAllRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: TweetCountAPIv2 { - func getTweetCountRecent( + public func getTweetCountRecent( _ request: GetTweetsCountsRecentRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getTweetCountAll( + /// https://developer.twitter.com/en/docs/twitter-api/tweets/counts/api-reference/get-tweets-counts-all + /// - Important: This endpoint is only available to those users who have been approved for Academic Research access. + public func getTweetCountAll( _ request: GetTweetsCountsAllRequestV2 ) -> TwitterAPISessionJSONTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/APIv2/TwitterAPIv2.swift b/Sources/TwitterAPIKit/APIv2/TwitterAPIv2.swift index 43b70478..74e12b79 100644 --- a/Sources/TwitterAPIKit/APIv2/TwitterAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/TwitterAPIv2.swift @@ -2,55 +2,38 @@ import Foundation // https://developer.twitter.com/en/docs/api-reference-index -public typealias TwitterAPIv2 = - TwitterAPIResourceV2 - & BlockAndMuteAPIv2 - & BookmarksAPIv2 - & ComplianceAPIv2 - & FriendshipsAPIv2 - & LikeAPIv2 - & ListAPIv2 - & RetweetAPIv2 - & SearchAPIv2 - & SpacesAPIv2 - & StreamAPIv2 - & TimelineAPIv2 - & TweetAPIv2 - & TweetCountAPIv2 - & UserAPIv2 +open class TwitterAPIv2 { + public let blockAndMute: BlockAndMuteAPIv2 + public let bookmarks: BookmarksAPIv2 + public let compliance: ComplianceAPIv2 + public let friendships: FriendshipsAPIv2 + public let like: LikeAPIv2 + public let list: ListAPIv2 + public let retweet: RetweetAPIv2 + public let search: SearchAPIv2 + public let spaces: SpacesAPIv2 + public let stream: StreamAPIv2 + public let timeline: TimelineAPIv2 + public let tweet: TweetAPIv2 + public let tweetCount: TweetCountAPIv2 + public let user: UserAPIv2 -public protocol TwitterAPIResourceV2 { - var blockAndMute: BlockAndMuteAPIv2 { get } - var bookmarks: BookmarksAPIv2 { get } - var compliance: ComplianceAPIv2 { get } - var friendships: FriendshipsAPIv2 { get } - var like: LikeAPIv2 { get } - var list: ListAPIv2 { get } - var retweet: RetweetAPIv2 { get } - var search: SearchAPIv2 { get } - var spaces: SpacesAPIv2 { get } - var stream: StreamAPIv2 { get } - var timeline: TimelineAPIv2 { get } - var tweet: TweetAPIv2 { get } - var tweetCount: TweetCountAPIv2 { get } - var user: UserAPIv2 { get } -} - -extension TwitterAPIClient.TwitterAPIImplV2: TwitterAPIResourceV2 { - var blockAndMute: BlockAndMuteAPIv2 { return self } - var bookmarks: BookmarksAPIv2 { return self } - var friendships: FriendshipsAPIv2 { return self } - var compliance: ComplianceAPIv2 { return self } - var like: LikeAPIv2 { return self } - var list: ListAPIv2 { return self } - var retweet: RetweetAPIv2 { return self } - var search: SearchAPIv2 { return self } - var spaces: SpacesAPIv2 { return self } - var stream: StreamAPIv2 { return self } - var timeline: TimelineAPIv2 { return self } - var tweet: TweetAPIv2 { return self } - var tweetCount: TweetCountAPIv2 { return self } - var user: UserAPIv2 { return self } + public init(session: TwitterAPISession) { + blockAndMute = .init(session: session) + bookmarks = .init(session: session) + compliance = .init(session: session) + friendships = .init(session: session) + like = .init(session: session) + list = .init(session: session) + retweet = .init(session: session) + search = .init(session: session) + spaces = .init(session: session) + stream = .init(session: session) + timeline = .init(session: session) + tweet = .init(session: session) + tweetCount = .init(session: session) + user = .init(session: session) + } } public protocol TwitterAPIv2RequestParameter { diff --git a/Sources/TwitterAPIKit/APIv2/Users/UserAPIv2.swift b/Sources/TwitterAPIKit/APIv2/Users/UserAPIv2.swift index 8b7adf50..08e424dc 100644 --- a/Sources/TwitterAPIKit/APIv2/Users/UserAPIv2.swift +++ b/Sources/TwitterAPIKit/APIv2/Users/UserAPIv2.swift @@ -1,51 +1,38 @@ import Foundation -public protocol UserAPIv2 { +open class UserAPIv2: TwitterAPIBase { /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-id - func getUser( + public func getUser( _ request: GetUserRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users - func getUsers( - _ request: GetUsersRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username - func getUserByUsername( - _ request: GetUsersByUsernameRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by - func getUsersByUsernames( - _ request: GetUsersByRequestV2 - ) -> TwitterAPISessionJSONTask - - /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me - func getMe( - _ request: GetUsersMeRequestV2 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAPIImplV2: UserAPIv2 { - - func getUser(_ request: GetUserRequestV2) -> TwitterAPISessionJSONTask { + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getUsers(_ request: GetUsersRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users + public func getUsers( + _ request: GetUsersRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getUserByUsername(_ request: GetUsersByUsernameRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by-username-username + public func getUserByUsername( + _ request: GetUsersByUsernameRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getUsersByUsernames(_ request: GetUsersByRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-by + public func getUsersByUsernames( + _ request: GetUsersByRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } - func getMe(_ request: GetUsersMeRequestV2) -> TwitterAPISessionJSONTask { + /// https://developer.twitter.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me + public func getMe( + _ request: GetUsersMeRequestV2 + ) -> TwitterAPISessionJSONTask { return session.send(request) } } diff --git a/Sources/TwitterAPIKit/AuthAPI/AuthAPI.swift b/Sources/TwitterAPIKit/AuthAPI/AuthAPI.swift index e87a3f92..1ec7993b 100644 --- a/Sources/TwitterAPIKit/AuthAPI/AuthAPI.swift +++ b/Sources/TwitterAPIKit/AuthAPI/AuthAPI.swift @@ -1,14 +1,10 @@ -public typealias TwitterAuthAPI = - TwitterAuthAPIResource - & OAuth10aAPI - & OAuth20API +open class TwitterAuthAPI { -public protocol TwitterAuthAPIResource { - var oauth10a: OAuth10aAPI { get } - var oauth20: OAuth20API { get } -} + public let oauth10a: OAuth10aAPI + public let oauth20: OAuth20API -extension TwitterAPIClient.TwitterAuthAPIImpl: TwitterAuthAPIResource { - var oauth10a: OAuth10aAPI { return self } - var oauth20: OAuth20API { return self } + public init(session: TwitterAPISession) { + oauth10a = .init(session: session) + oauth20 = .init(session: session) + } } diff --git a/Sources/TwitterAPIKit/AuthAPI/OAuth10aAPI.swift b/Sources/TwitterAPIKit/AuthAPI/OAuth10aAPI.swift index f6ed02f4..cb9f4f34 100644 --- a/Sources/TwitterAPIKit/AuthAPI/OAuth10aAPI.swift +++ b/Sources/TwitterAPIKit/AuthAPI/OAuth10aAPI.swift @@ -1,46 +1,16 @@ import Foundation -public protocol OAuth10aAPI { - /// https://developer.twitter.com/en/docs/authentication/api-reference/request_token - func postOAuthRequestTokenData( - _ request: PostOAuthRequestTokenRequestV1 - ) -> TwitterAPISessionDataTask +open class OAuth10aAPI: TwitterAPIBase { /// https://developer.twitter.com/en/docs/authentication/api-reference/request_token - func postOAuthRequestToken( - _ request: PostOAuthRequestTokenRequestV1 - ) -> TwitterAPISessionSpecializedTask - - /// Create https://developer.twitter.com/en/docs/authentication/api-reference/authorize URL. - func makeOAuthAuthorizeURL(_ request: GetOAuthAuthorizeRequestV1) -> URL? - - /// Create https://developer.twitter.com/en/docs/authentication/api-reference/authenticate URL. - func makeOAuthAuthenticateURL(_ request: GetOAuthAuthenticateRequestV1) -> URL? - - /// https://developer.twitter.com/en/docs/authentication/api-reference/access_token - func postOAuthAccessTokenData( - _ request: PostOAuthAccessTokenRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/authentication/api-reference/access_token - func postOAuthAccessToken( - _ request: PostOAuthAccessTokenRequestV1 - ) -> TwitterAPISessionSpecializedTask - - /// https://developer.twitter.com/en/docs/authentication/api-reference/invalidate_access_token - func postInvalidateAccessToken( - _ request: PostOAuthInvalidateTokenRequestV1 - ) -> TwitterAPISessionJSONTask -} - -extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth10aAPI { public func postOAuthRequestTokenData( _ request: PostOAuthRequestTokenRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) } - func postOAuthRequestToken( + /// https://developer.twitter.com/en/docs/authentication/api-reference/request_token + public func postOAuthRequestToken( _ request: PostOAuthRequestTokenRequestV1 ) -> TwitterAPISessionSpecializedTask { return session.send(request) @@ -54,23 +24,27 @@ extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth10aAPI { } } + /// Create https://developer.twitter.com/en/docs/authentication/api-reference/authorize URL. public func makeOAuthAuthorizeURL(_ request: GetOAuthAuthorizeRequestV1) -> URL? { // ignore exception return try? request.buildRequest(environment: session.environment).url } + /// Create https://developer.twitter.com/en/docs/authentication/api-reference/authenticate URL. public func makeOAuthAuthenticateURL(_ request: GetOAuthAuthenticateRequestV1) -> URL? { // ignore exception return try? request.buildRequest(environment: session.environment).url } + /// https://developer.twitter.com/en/docs/authentication/api-reference/access_token public func postOAuthAccessTokenData( _ request: PostOAuthAccessTokenRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) } - func postOAuthAccessToken( + /// https://developer.twitter.com/en/docs/authentication/api-reference/access_token + public func postOAuthAccessToken( _ request: PostOAuthAccessTokenRequestV1 ) -> TwitterAPISessionSpecializedTask { return session.send(request) @@ -84,6 +58,7 @@ extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth10aAPI { } } + /// https://developer.twitter.com/en/docs/authentication/api-reference/invalidate_access_token public func postInvalidateAccessToken( _ request: PostOAuthInvalidateTokenRequestV1 ) -> TwitterAPISessionJSONTask { diff --git a/Sources/TwitterAPIKit/AuthAPI/OAuth20API.swift b/Sources/TwitterAPIKit/AuthAPI/OAuth20API.swift index c310b366..30b547ff 100644 --- a/Sources/TwitterAPIKit/AuthAPI/OAuth20API.swift +++ b/Sources/TwitterAPIKit/AuthAPI/OAuth20API.swift @@ -1,65 +1,18 @@ import Foundation -public protocol OAuth20API { +open class OAuth20API: TwitterAPIBase { // MARK: - OAuth 2.0 Bearer Token /// https://developer.twitter.com/en/docs/authentication/api-reference/token - func postOAuth2BearerTokenData( - _ request: PostOAuth2TokenRequestV1 - ) -> TwitterAPISessionDataTask - - /// https://developer.twitter.com/en/docs/authentication/api-reference/token - func postOAuth2BearerToken( - _ request: PostOAuth2TokenRequestV1 - ) -> TwitterAPISessionSpecializedTask - - /// https://developer.twitter.com/en/docs/authentication/api-reference/invalidate_bearer_token - /// - ///May not work. {"errors":[{"code":348,"message":"Client application is not permitted to to invalidate this token."}]} - /// https://twittercommunity.com/t/oauth2-invalidate-token-not-working-for-app-only-authentication-tokens/133108 - /// https://twittercommunity.com/t/invalidate-bearer-client-application-not-permitted/162761 - func postInvalidateOAuth2BearerToken( - _ request: PostOAuth2InvalidateTokenRequestV1 - ) -> TwitterAPISessionJSONTask - - // MARK: - OAuth 2.0 Authorization Code Flow with PKCE - - /// Create OAuth 2.0 Authorize URL - func makeOAuth2AuthorizeURL(_ request: GetOAuth2AuthorizeRequestV1) -> URL? - - func postOAuth2AccessTokenData( - _ request: PostOAuth2AccessTokenRequestV2 - ) -> TwitterAPISessionDataTask - - func postOAuth2AccessToken( - _ request: PostOAuth2AccessTokenRequestV2 - ) -> TwitterAPISessionSpecializedTask - - func postOAuth2RefreshTokenData( - _ request: PostOAuth2RefreshTokenRequestV2 - ) -> TwitterAPISessionDataTask - - func postOAuth2RefreshToken( - _ request: PostOAuth2RefreshTokenRequestV2 - ) -> TwitterAPISessionSpecializedTask - - func postOAuth2RevokeToken( - _ request: PostOAuth2RevokeTokenRequestV2 - ) -> TwitterAPISessionDataTask -} - -extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth20API { - - // MARK: - OAuth 2.0 Bearer Token - public func postOAuth2BearerTokenData( _ request: PostOAuth2TokenRequestV1 ) -> TwitterAPISessionDataTask { return session.send(request) } - func postOAuth2BearerToken( + /// https://developer.twitter.com/en/docs/authentication/api-reference/token + public func postOAuth2BearerToken( _ request: PostOAuth2TokenRequestV1 ) -> TwitterAPISessionSpecializedTask { return session.send(request) @@ -79,6 +32,11 @@ extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth20API { } } + /// https://developer.twitter.com/en/docs/authentication/api-reference/invalidate_bearer_token + /// + ///May not work. {"errors":[{"code":348,"message":"Client application is not permitted to to invalidate this token."}]} + /// https://twittercommunity.com/t/oauth2-invalidate-token-not-working-for-app-only-authentication-tokens/133108 + /// https://twittercommunity.com/t/invalidate-bearer-client-application-not-permitted/162761 public func postInvalidateOAuth2BearerToken( _ request: PostOAuth2InvalidateTokenRequestV1 ) -> TwitterAPISessionJSONTask { @@ -87,6 +45,7 @@ extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth20API { // MARK: - OAuth 2.0 Authorization Code Flow with PKCE + /// Create OAuth 2.0 Authorize URL public func makeOAuth2AuthorizeURL(_ request: GetOAuth2AuthorizeRequestV1) -> URL? { return try? request.buildRequest(environment: session.environment).url } @@ -97,27 +56,28 @@ extension TwitterAPIClient.TwitterAuthAPIImpl: OAuth20API { return session.send(request) } - func postOAuth2AccessToken( + public func postOAuth2AccessToken( _ request: PostOAuth2AccessTokenRequestV2 ) -> TwitterAPISessionSpecializedTask { return postOAuth2AccessTokenData(request) .specialized { try TwitterOAuth2AccessToken.fromResponse(data: $0) } } - func postOAuth2RefreshTokenData( + public func postOAuth2RefreshTokenData( _ request: PostOAuth2RefreshTokenRequestV2 ) -> TwitterAPISessionDataTask { return session.send(request) } - func postOAuth2RefreshToken(_ request: PostOAuth2RefreshTokenRequestV2) -> TwitterAPISessionSpecializedTask< - TwitterOAuth2AccessToken - > { + public func postOAuth2RefreshToken( + _ request: PostOAuth2RefreshTokenRequestV2 + ) -> TwitterAPISessionSpecializedTask { return postOAuth2RefreshTokenData(request) .specialized { try TwitterOAuth2AccessToken.fromResponse(data: $0) } + } - func postOAuth2RevokeToken( + public func postOAuth2RevokeToken( _ request: PostOAuth2RevokeTokenRequestV2 ) -> TwitterAPISessionDataTask { return session.send(request) diff --git a/Sources/TwitterAPIKit/TwitterAPI+Flat.generated.swift b/Sources/TwitterAPIKit/TwitterAPI+Flat.generated.swift new file mode 100644 index 00000000..060a3e28 --- /dev/null +++ b/Sources/TwitterAPIKit/TwitterAPI+Flat.generated.swift @@ -0,0 +1,680 @@ +// Generated using Sourcery 1.8.1 — https://github.com/krzysztofzablocki/Sourcery +// DO NOT EDIT + +// swift-format-ignore-file +import Foundation + +extension TwitterAuthAPI { + + // MARK: - OAuth10aAPI + + public func postOAuthRequestTokenData(_ request: PostOAuthRequestTokenRequestV1) -> TwitterAPISessionDataTask { + return oauth10a.postOAuthRequestTokenData(request) + } + public func postOAuthRequestToken(_ request: PostOAuthRequestTokenRequestV1) -> TwitterAPISessionSpecializedTask { + return oauth10a.postOAuthRequestToken(request) + } + public func makeOAuthAuthorizeURL(_ request: GetOAuthAuthorizeRequestV1) -> URL? { + return oauth10a.makeOAuthAuthorizeURL(request) + } + public func makeOAuthAuthenticateURL(_ request: GetOAuthAuthenticateRequestV1) -> URL? { + return oauth10a.makeOAuthAuthenticateURL(request) + } + public func postOAuthAccessTokenData(_ request: PostOAuthAccessTokenRequestV1) -> TwitterAPISessionDataTask { + return oauth10a.postOAuthAccessTokenData(request) + } + public func postOAuthAccessToken(_ request: PostOAuthAccessTokenRequestV1) -> TwitterAPISessionSpecializedTask { + return oauth10a.postOAuthAccessToken(request) + } + public func postInvalidateAccessToken(_ request: PostOAuthInvalidateTokenRequestV1) -> TwitterAPISessionJSONTask { + return oauth10a.postInvalidateAccessToken(request) + } + + // MARK: - OAuth20API + + public func postOAuth2BearerTokenData(_ request: PostOAuth2TokenRequestV1) -> TwitterAPISessionDataTask { + return oauth20.postOAuth2BearerTokenData(request) + } + public func postOAuth2BearerToken(_ request: PostOAuth2TokenRequestV1) -> TwitterAPISessionSpecializedTask { + return oauth20.postOAuth2BearerToken(request) + } + public func postInvalidateOAuth2BearerToken(_ request: PostOAuth2InvalidateTokenRequestV1) -> TwitterAPISessionJSONTask { + return oauth20.postInvalidateOAuth2BearerToken(request) + } + public func makeOAuth2AuthorizeURL(_ request: GetOAuth2AuthorizeRequestV1) -> URL? { + return oauth20.makeOAuth2AuthorizeURL(request) + } + public func postOAuth2AccessTokenData(_ request: PostOAuth2AccessTokenRequestV2) -> TwitterAPISessionDataTask { + return oauth20.postOAuth2AccessTokenData(request) + } + public func postOAuth2AccessToken(_ request: PostOAuth2AccessTokenRequestV2) -> TwitterAPISessionSpecializedTask { + return oauth20.postOAuth2AccessToken(request) + } + public func postOAuth2RefreshTokenData(_ request: PostOAuth2RefreshTokenRequestV2) -> TwitterAPISessionDataTask { + return oauth20.postOAuth2RefreshTokenData(request) + } + public func postOAuth2RefreshToken(_ request: PostOAuth2RefreshTokenRequestV2) -> TwitterAPISessionSpecializedTask { + return oauth20.postOAuth2RefreshToken(request) + } + public func postOAuth2RevokeToken(_ request: PostOAuth2RevokeTokenRequestV2) -> TwitterAPISessionDataTask { + return oauth20.postOAuth2RevokeToken(request) + } +} + +extension TwitterAPIv1 { + + // MARK: - AccountAPIv1 + + public func getAccountSetting(_ request: GetAccountSettingsRequestV1) -> TwitterAPISessionJSONTask { + return account.getAccountSetting(request) + } + public func getAccountVerify(_ request: GetAccountVerifyCredentialsRequestV1) -> TwitterAPISessionJSONTask { + return account.getAccountVerify(request) + } + public func postRemoveProfileBanner(_ request: PostAccountRemoveProfileBannerRequestV1) -> TwitterAPISessionJSONTask { + return account.postRemoveProfileBanner(request) + } + public func postAccountSettings(_ request: PostAccountSettingsRequestV1) -> TwitterAPISessionJSONTask { + return account.postAccountSettings(request) + } + public func postAccountProfile(_ request: PostAccountUpdateProfileRequestV1) -> TwitterAPISessionJSONTask { + return account.postAccountProfile(request) + } + public func postProfileBanner(_ request: PostAccountUpdateProfileBannerRequestV1) -> TwitterAPISessionDataTask { + return account.postProfileBanner(request) + } + public func postProfileImage(_ request: PostAccountUpdateProfileImageRequestV1) -> TwitterAPISessionJSONTask { + return account.postProfileImage(request) + } + + // MARK: - ApplicationAPIv1 + + public func getRateLimit(_ request: GetApplicationRateLimitStatusRequestV1) -> TwitterAPISessionJSONTask { + return application.getRateLimit(request) + } + + // MARK: - BlockAndMuteAPIv1 + + public func getBlockIDs(_ request: GetBlocksIDsRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.getBlockIDs(request) + } + public func getBlockUsers(_ request: GetBlocksListRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.getBlockUsers(request) + } + public func getMuteIDs(_ request: GetMutesUsersIDsRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.getMuteIDs(request) + } + public func getMuteUsers(_ request: GetMutesUsersListRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.getMuteUsers(request) + } + public func postBlockUser(_ request: PostBlocksCreateRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.postBlockUser(request) + } + public func postUnblockUser(_ request: PostBlocksDestroyRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.postUnblockUser(request) + } + public func postMuteUser(_ request: PostMutesUsersCreateRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.postMuteUser(request) + } + public func postUnmuteUser(_ request: PostMutesUsersDestroyRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.postUnmuteUser(request) + } + public func postReportSpam(_ request: PostUsersReportSpamRequestV1) -> TwitterAPISessionJSONTask { + return blockAndMute.postReportSpam(request) + } + + // MARK: - CollectionAPIv1 + + public func getCollectionEntries(_ request: GetCollectionsEntriesRequestV1) -> TwitterAPISessionJSONTask { + return collection.getCollectionEntries(request) + } + public func getCollections(_ request: GetCollectionsListRequestV1) -> TwitterAPISessionJSONTask { + return collection.getCollections(request) + } + public func getCollection(_ request: GetCollectionsShowRequestV1) -> TwitterAPISessionJSONTask { + return collection.getCollection(request) + } + public func postCreateCollection(_ request: PostCollectionsCreateRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCreateCollection(request) + } + public func postDestroyCollection(_ request: PostCollectionsDestroyRequestV1) -> TwitterAPISessionJSONTask { + return collection.postDestroyCollection(request) + } + public func postCollectionAddEntry(_ request: PostCollectionsEntriesAddRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCollectionAddEntry(request) + } + public func postCollectionCurate(_ request: PostCollectionsEntriesCurateRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCollectionCurate(request) + } + public func postCollectionMoveEntry(_ request: PostCollectionsEntriesMoveRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCollectionMoveEntry(request) + } + public func postCollectionRemoveEntry(_ request: PostCollectionsEntriesRemoveRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCollectionRemoveEntry(request) + } + public func postCollectionUpdate(_ request: PostCollectionsUpdateRequestV1) -> TwitterAPISessionJSONTask { + return collection.postCollectionUpdate(request) + } + + // MARK: - DirectMessageAPIv1 + + public func postDirectMessage(_ request: PostDirectMessageRequestV1) -> TwitterAPISessionJSONTask { + return directMessage.postDirectMessage(request) + } + public func deleteDirectMessage(_ request: DeleteDirectMessageRequestV1) -> TwitterAPISessionDataTask { + return directMessage.deleteDirectMessage(request) + } + public func getDirectMessage(_ request: GetDirectMessageRequestV1) -> TwitterAPISessionJSONTask { + return directMessage.getDirectMessage(request) + } + public func getDirectMessageList(_ request: GetDirectMessageListRequestV1) -> TwitterAPISessionJSONTask { + return directMessage.getDirectMessageList(request) + } + public func postDirectMessageMarkRead(_ request: PostDirectMessagesMarkReadRequestV1) -> TwitterAPISessionDataTask { + return directMessage.postDirectMessageMarkRead(request) + } + public func postDirectMessageTypingIndicator(_ request: PostDirectMessagesIndicateTypingRequestV1) -> TwitterAPISessionDataTask { + return directMessage.postDirectMessageTypingIndicator(request) + } + + // MARK: - FavoriteAPIv1 + + public func postFavorite(_ request: PostFavoriteRequestV1) -> TwitterAPISessionJSONTask { + return favorite.postFavorite(request) + } + public func postUnFavorite(_ request: PostUnFavoriteRequestV1) -> TwitterAPISessionJSONTask { + return favorite.postUnFavorite(request) + } + public func getFavorites(_ request: GetFavoritesRequestV1) -> TwitterAPISessionJSONTask { + return favorite.getFavorites(request) + } + + // MARK: - FriendshipsAPIv1 + + public func getFollowerIDs(_ request: GetFollowersIDsRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFollowerIDs(request) + } + public func getFollowers(_ request: GetFollowersListRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFollowers(request) + } + public func getFriendIDs(_ request: GetFriendsIDsRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendIDs(request) + } + public func getFriends(_ request: GetFriendsListRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriends(request) + } + public func getFriendshipsIncoming(_ request: GetFriendshipsIncomingRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendshipsIncoming(request) + } + public func getFriendshipsLookup(_ request: GetFriendshipsLookupRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendshipsLookup(request) + } + public func getFriendshipsNoRetweetsIDs(_ request: GetFriendshipsNoRetweetsIDsRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendshipsNoRetweetsIDs(request) + } + public func getFriendshipsOutgoing(_ request: GetFriendshipsOutgoingRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendshipsOutgoing(request) + } + public func getFriendships(_ request: GetFriendshipsShowRequestV1) -> TwitterAPISessionJSONTask { + return friendships.getFriendships(request) + } + public func postFollowUser(_ request: PostFriendshipsCreateRequestV1) -> TwitterAPISessionJSONTask { + return friendships.postFollowUser(request) + } + public func postUnfollowUser(_ request: PostFriendshipsDestroyRequestV1) -> TwitterAPISessionJSONTask { + return friendships.postUnfollowUser(request) + } + public func postFriendshipsUpdate(_ request: PostFriendshipsUpdateRequestV1) -> TwitterAPISessionJSONTask { + return friendships.postFriendshipsUpdate(request) + } + + // MARK: - GeoAPIv1 + + public func getReverseGeocode(_ request: GetGeoReverseGeocodeRequestV1) -> TwitterAPISessionJSONTask { + return geo.getReverseGeocode(request) + } + public func getGeoPlace(_ request: GetGeoPlaceIDRequestV1) -> TwitterAPISessionJSONTask { + return geo.getGeoPlace(request) + } + public func searchGeo(_ request: GetGeoSearchRequestV1) -> TwitterAPISessionJSONTask { + return geo.searchGeo(request) + } + + // MARK: - HelpAPIv1 + + public func getSupportedLanguages(_ request: GetHelpLanguagesRequestV1) -> TwitterAPISessionJSONTask { + return help.getSupportedLanguages(request) + } + + // MARK: - ListAPIv1 + + public func getLists(_ request: GetListsListRequestV1) -> TwitterAPISessionJSONTask { + return list.getLists(request) + } + public func getListMembers(_ request: GetListsMembersRequestV1) -> TwitterAPISessionJSONTask { + return list.getListMembers(request) + } + public func getListMember(_ request: GetListsMembersShowRequestV1) -> TwitterAPISessionJSONTask { + return list.getListMember(request) + } + public func getListMemberships(_ request: GetListsMembershipsRequestV1) -> TwitterAPISessionJSONTask { + return list.getListMemberships(request) + } + public func getListOwnerships(_ request: GetListsOwnershipsRequestV1) -> TwitterAPISessionJSONTask { + return list.getListOwnerships(request) + } + public func getList(_ request: GetListsShowRequestV1) -> TwitterAPISessionJSONTask { + return list.getList(request) + } + public func getListStatuses(_ request: GetListsStatusesRequestV1) -> TwitterAPISessionJSONTask { + return list.getListStatuses(request) + } + public func getListSubscribers(_ request: GetListsSubscribersRequestV1) -> TwitterAPISessionJSONTask { + return list.getListSubscribers(request) + } + public func getListSubscriber(_ request: GetListsSubscribersShowRequestV1) -> TwitterAPISessionJSONTask { + return list.getListSubscriber(request) + } + public func getListSubscriptions(_ request: GetListsSubscriptionsRequestV1) -> TwitterAPISessionJSONTask { + return list.getListSubscriptions(request) + } + public func postCreateList(_ request: PostListsCreateRequestV1) -> TwitterAPISessionJSONTask { + return list.postCreateList(request) + } + public func postDestroyList(_ request: PostListsDestroyRequestV1) -> TwitterAPISessionJSONTask { + return list.postDestroyList(request) + } + public func postAddListMember(_ request: PostListsMembersCreateRequestV1) -> TwitterAPISessionJSONTask { + return list.postAddListMember(request) + } + public func postAddListMembers(_ request: PostListsMembersCreateAllRequestV1) -> TwitterAPISessionJSONTask { + return list.postAddListMembers(request) + } + public func postRemoveListMember(_ request: PostListsMembersDestroyRequestV1) -> TwitterAPISessionJSONTask { + return list.postRemoveListMember(request) + } + public func postRemoveListMembers(_ request: PostListsMembersDestroyAllRequestV1) -> TwitterAPISessionJSONTask { + return list.postRemoveListMembers(request) + } + public func postSubscribeList(_ request: PostListsSubscribersCreateRequestV1) -> TwitterAPISessionJSONTask { + return list.postSubscribeList(request) + } + public func postUnsubscribeList(_ request: PostListsSubscribersDestroyRequestV1) -> TwitterAPISessionJSONTask { + return list.postUnsubscribeList(request) + } + public func postUpdateList(_ request: PostListsUpdateRequestV1) -> TwitterAPISessionJSONTask { + return list.postUpdateList(request) + } + + // MARK: - MediaAPIv1 + + public func getUploadMediaStatus(_ request: GetUploadMediaStatusRequestV1) -> TwitterAPISessionJSONTask { + return media.getUploadMediaStatus(request) + } + public func uploadMediaInit(_ request: UploadMediaInitRequestV1) -> TwitterAPISessionJSONTask { + return media.uploadMediaInit(request) + } + public func uploadMediaAppend(_ request: UploadMediaAppendRequestV1) -> TwitterAPISessionJSONTask { + return media.uploadMediaAppend(request) + } + public func uploadMediaAppendSplitChunks(_ request: UploadMediaAppendRequestV1, maxBytes: Int = 5_242_880) -> [TwitterAPISessionSpecializedTask] { + return media.uploadMediaAppendSplitChunks(request, maxBytes: maxBytes) + } + public func uploadMediaFinalize(_ request: UploadMediaFinalizeRequestV1) -> TwitterAPISessionJSONTask { + return media.uploadMediaFinalize(request) + } + public func uploadMedia(_ parameters: UploadMediaRequestParameters, completionHandler: @escaping (TwitterAPIResponse) -> Void) { + media.uploadMedia(parameters, completionHandler: completionHandler) + } + public func waitMediaProcessing(mediaID: String, initialWaitSec: Int, completionHandler: @escaping (TwitterAPIResponse) -> Void) { + media.waitMediaProcessing(mediaID: mediaID, initialWaitSec: initialWaitSec, completionHandler: completionHandler) + } + public func waitMediaProcessing(mediaID: String, completionHandler: @escaping (TwitterAPIResponse) -> Void) { + media.waitMediaProcessing(mediaID: mediaID, completionHandler: completionHandler) + } + public func createMediaMetadata(_ request: PostMediaMetadataCreateRequestV1) -> TwitterAPISessionDataTask { + return media.createMediaMetadata(request) + } + public func createSubtitle(_ request: PostMediaSubtitlesCreateRequestV1) -> TwitterAPISessionDataTask { + return media.createSubtitle(request) + } + public func deleteSubtitle(_ request: PostMediaSubtitlesDeleteRequestV1) -> TwitterAPISessionDataTask { + return media.deleteSubtitle(request) + } + + // MARK: - RetweetAPIv1 + + public func postRetweet(_ request: PostRetweetRequestV1) -> TwitterAPISessionJSONTask { + return retweet.postRetweet(request) + } + public func postUnRetweet(_ request: PostUnRetweetRequestV1) -> TwitterAPISessionJSONTask { + return retweet.postUnRetweet(request) + } + public func getRetweets(_ request: GetRetweetsRequestV1) -> TwitterAPISessionJSONTask { + return retweet.getRetweets(request) + } + public func getRetweetsOfMe(_ request: GetRetweetsOfMeRequestV1) -> TwitterAPISessionJSONTask { + return retweet.getRetweetsOfMe(request) + } + public func getRetweeters(_ request: GetRetweetersRequestV1) -> TwitterAPISessionJSONTask { + return retweet.getRetweeters(request) + } + + // MARK: - SearchAPIv1 + + public func searchTweets(_ request: GetSearchTweetsRequestV1) -> TwitterAPISessionJSONTask { + return search.searchTweets(request) + } + public func getSavedSearches(_ request: GetSavedSearchesListRequestV1) -> TwitterAPISessionJSONTask { + return search.getSavedSearches(request) + } + public func postCreateSavedSearch(_ request: PostSavedSearchesCreateRequestV1) -> TwitterAPISessionJSONTask { + return search.postCreateSavedSearch(request) + } + public func postDestroySavedSearch(_ request: PostSavedSearchesCreateRequestV1) -> TwitterAPISessionJSONTask { + return search.postDestroySavedSearch(request) + } + + // MARK: - TimelineAPIv1 + + public func getHomeTimeline(_ request: GetStatusesHomeTimelineRequestV1) -> TwitterAPISessionJSONTask { + return timeline.getHomeTimeline(request) + } + public func getMentionsTimeline(_ request: GetStatusesMentionsTimelineRequestV1) -> TwitterAPISessionJSONTask { + return timeline.getMentionsTimeline(request) + } + public func getUserTimeline(_ request: GetStatusesUserTimelineRequestV1) -> TwitterAPISessionJSONTask { + return timeline.getUserTimeline(request) + } + + // MARK: - TrendAPIv1 + + public func getTrendsAvailable(_ request: GetTrendsAvailableRequestV1) -> TwitterAPISessionJSONTask { + return trend.getTrendsAvailable(request) + } + public func getTrendsClosest(_ request: GetTrendsClosestRequestV1) -> TwitterAPISessionJSONTask { + return trend.getTrendsClosest(request) + } + public func getTrends(_ request: GetTrendsPlaceRequestV1) -> TwitterAPISessionJSONTask { + return trend.getTrends(request) + } + + // MARK: - TweetAPIv1 + + public func postUpdateStatus(_ request: PostStatusesUpdateRequestV1) -> TwitterAPISessionJSONTask { + return tweet.postUpdateStatus(request) + } + public func postDestroyStatus(_ request: PostStatusesDestroyRequestV1) -> TwitterAPISessionJSONTask { + return tweet.postDestroyStatus(request) + } + public func getShowStatus(_ request: GetStatusesShowRequestV1) -> TwitterAPISessionJSONTask { + return tweet.getShowStatus(request) + } + public func getLookupStatuses(_ request: GetStatusesLookupRequestV1) -> TwitterAPISessionJSONTask { + return tweet.getLookupStatuses(request) + } + + // MARK: - UserAPIv1 + + public func getUsers(_ request: GetUsersLookupRequestV1) -> TwitterAPISessionJSONTask { + return user.getUsers(request) + } + public func getUser(_ request: GetUsersShowRequestV1) -> TwitterAPISessionJSONTask { + return user.getUser(request) + } + public func searchUser(_ request: GetUsersShowRequestV1) -> TwitterAPISessionJSONTask { + return user.searchUser(request) + } + public func getUserProfileBanner(_ request: GetUsersProfileBannerRequestV1) -> TwitterAPISessionJSONTask { + return user.getUserProfileBanner(request) + } +} + +extension TwitterAPIv2 { + + // MARK: - BlockAndMuteAPIv2 + + public func getBlockUsers(_ request: GetUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.getBlockUsers(request) + } + public func blockUser(_ request: PostUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.blockUser(request) + } + public func unblockUser(_ request: DeleteUsersBlockingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.unblockUser(request) + } + public func getMuteUsers(_ request: GetUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.getMuteUsers(request) + } + public func muteUser(_ request: PostUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.muteUser(request) + } + public func unmuteUser(_ request: DeleteUsersMutingRequestV2) -> TwitterAPISessionJSONTask { + return blockAndMute.unmuteUser(request) + } + + // MARK: - BookmarksAPIv2 + + public func getBookmarks(_ request: GetUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + return bookmarks.getBookmarks(request) + } + public func createBookmark(_ request: PostUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + return bookmarks.createBookmark(request) + } + public func deleteBookmark(_ request: DeleteUsersBookmarksRequestV2) -> TwitterAPISessionJSONTask { + return bookmarks.deleteBookmark(request) + } + + // MARK: - ComplianceAPIv2 + + public func getComplianceJob(_ request: GetComplianceJobRequestV2) -> TwitterAPISessionJSONTask { + return compliance.getComplianceJob(request) + } + public func getComplianceJobj(_ request: GetComplianceJobsRequestV2) -> TwitterAPISessionJSONTask { + return compliance.getComplianceJobj(request) + } + public func createComplianceJob(_ request: PostComplianceJobsRequestV2) -> TwitterAPISessionJSONTask { + return compliance.createComplianceJob(request) + } + + // MARK: - FriendshipsAPIv2 + + public func getFollowing(_ request: GetUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + return friendships.getFollowing(request) + } + public func getFollowers(_ request: GetUsersFollowersRequestV2) -> TwitterAPISessionJSONTask { + return friendships.getFollowers(request) + } + public func follow(_ request: PostUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + return friendships.follow(request) + } + public func unfollow(_ request: DeleteUsersFollowingRequestV2) -> TwitterAPISessionJSONTask { + return friendships.unfollow(request) + } + + // MARK: - LikeAPIv2 + + public func getLikingUsers(_ request: GetTweetsLikingUsersRequestV2) -> TwitterAPISessionJSONTask { + return like.getLikingUsers(request) + } + public func getLikedTweets(_ request: GetUsersLikedTweetsRequestV2) -> TwitterAPISessionJSONTask { + return like.getLikedTweets(request) + } + public func postLike(_ request: PostUsersLikesRequestV2) -> TwitterAPISessionJSONTask { + return like.postLike(request) + } + public func deleteLike(_ request: DeleteUsersLikesRequestV2) -> TwitterAPISessionJSONTask { + return like.deleteLike(request) + } + + // MARK: - ListAPIv2 + + public func getListTweets(_ request: GetListsTweetsRequestV2) -> TwitterAPISessionJSONTask { + return list.getListTweets(request) + } + public func getList(_ request: GetListRequestV2) -> TwitterAPISessionJSONTask { + return list.getList(request) + } + public func getLists(_ request: GetUsersOwnedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.getLists(request) + } + public func followList(_ request: PostUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.followList(request) + } + public func unfollowList(_ request: DeleteUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.unfollowList(request) + } + public func listFollowers(_ request: GetListsFollowersRequestV2) -> TwitterAPISessionJSONTask { + return list.listFollowers(request) + } + public func followedLists(_ request: GetUsersFollowedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.followedLists(request) + } + public func addListMember(_ request: PostListsMembersRequestV2) -> TwitterAPISessionJSONTask { + return list.addListMember(request) + } + public func removeListMember(_ request: DeleteListsMembersRequestV2) -> TwitterAPISessionJSONTask { + return list.removeListMember(request) + } + public func getListMemberships(_ request: GetUsersListMembershipsRequestV2) -> TwitterAPISessionJSONTask { + return list.getListMemberships(request) + } + public func getListMembers(_ request: GetListsMembersRequestV2) -> TwitterAPISessionJSONTask { + return list.getListMembers(request) + } + public func createList(_ request: PostListsRequestV2) -> TwitterAPISessionJSONTask { + return list.createList(request) + } + public func updateList(_ request: PutListRequestV2) -> TwitterAPISessionJSONTask { + return list.updateList(request) + } + public func deleteList(_ request: DeleteListRequestV2) -> TwitterAPISessionJSONTask { + return list.deleteList(request) + } + public func pinnedList(_ request: GetUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.pinnedList(request) + } + public func pinList(_ request: PostUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.pinList(request) + } + public func unpinList(_ request: DeleteUsersPinnedListsRequestV2) -> TwitterAPISessionJSONTask { + return list.unpinList(request) + } + + // MARK: - RetweetAPIv2 + + public func getRetweetedBy(_ request: GetTweetsRetweetedByRequestV2) -> TwitterAPISessionJSONTask { + return retweet.getRetweetedBy(request) + } + public func postRetweet(_ request: PostUsersRetweetsRequestV2) -> TwitterAPISessionJSONTask { + return retweet.postRetweet(request) + } + public func deleteRetweet(_ request: DeleteUsersRetweetsRequestV2) -> TwitterAPISessionJSONTask { + return retweet.deleteRetweet(request) + } + + // MARK: - SearchAPIv2 + + public func searchTweetsRecent(_ request: GetTweetsSearchRecentRequestV2) -> TwitterAPISessionJSONTask { + return search.searchTweetsRecent(request) + } + public func searchTweetsAll(_ request: GetTweetsSearchAllRequestV2) -> TwitterAPISessionJSONTask { + return search.searchTweetsAll(request) + } + + // MARK: - SpacesAPIv2 + + public func getSpace(_ request: GetSpaceRequestV2) -> TwitterAPISessionJSONTask { + return spaces.getSpace(request) + } + public func getSpaces(_ request: GetSpacesRequestV2) -> TwitterAPISessionJSONTask { + return spaces.getSpaces(request) + } + public func getSpacesByCreators(_ request: GetSpacesByCreatorIDsRequestV2) -> TwitterAPISessionJSONTask { + return spaces.getSpacesByCreators(request) + } + public func getSpacesBuyers(_ request: GetSpacesBuyersRequestV2) -> TwitterAPISessionJSONTask { + return spaces.getSpacesBuyers(request) + } + public func getSPacesTweets(_ request: GetSpacesTweetsRequestV2) -> TwitterAPISessionJSONTask { + return spaces.getSPacesTweets(request) + } + public func searchSpaces(_ request: GetSpacesSearchRequestV2) -> TwitterAPISessionJSONTask { + return spaces.searchSpaces(request) + } + + // MARK: - StreamAPIv2 + + public func sampleStream(_ request: GetTweetsSampleStreamRequestV2) -> TwitterAPISessionStreamTask { + return stream.sampleStream(request) + } + public func getSearchStreamRules(_ request: GetTweetsSearchStreamRulesRequestV2) -> TwitterAPISessionJSONTask { + return stream.getSearchStreamRules(request) + } + public func postSearchStreamRules(_ request: PostTweetsSearchStreamRulesRequestV2) -> TwitterAPISessionJSONTask { + return stream.postSearchStreamRules(request) + } + public func searchStream(_ request: GetTweetsSearchStreamRequestV2) -> TwitterAPISessionStreamTask { + return stream.searchStream(request) + } + + // MARK: - TimelineAPIv2 + + public func getUserTweets(_ request: GetUsersTweetsRequestV2) -> TwitterAPISessionJSONTask { + return timeline.getUserTweets(request) + } + public func getUserMensions(_ request: GetUsersMentionsRequestV2) -> TwitterAPISessionJSONTask { + return timeline.getUserMensions(request) + } + public func getUserReverseChronological(_ request: GetUsersTimelinesReverseChronologicalRequestV2) -> TwitterAPISessionJSONTask { + return timeline.getUserReverseChronological(request) + } + + // MARK: - TweetAPIv2 + + public func getTweets(_ request: GetTweetsRequestV2) -> TwitterAPISessionJSONTask { + return tweet.getTweets(request) + } + public func getTweet(_ request: GetTweetRequestV2) -> TwitterAPISessionJSONTask { + return tweet.getTweet(request) + } + public func getQuoteTweets(_ request: GetTweetsQuoteTweetsRequestV2) -> TwitterAPISessionJSONTask { + return tweet.getQuoteTweets(request) + } + public func deleteTweet(_ request: DeleteTweetRequestV2) -> TwitterAPISessionJSONTask { + return tweet.deleteTweet(request) + } + public func postTweet(_ request: PostTweetsRequestV2) -> TwitterAPISessionJSONTask { + return tweet.postTweet(request) + } + public func hideReply(_ request: PutTweetsHiddenRequestV2) -> TwitterAPISessionJSONTask { + return tweet.hideReply(request) + } + + // MARK: - TweetCountAPIv2 + + public func getTweetCountRecent(_ request: GetTweetsCountsRecentRequestV2) -> TwitterAPISessionJSONTask { + return tweetCount.getTweetCountRecent(request) + } + public func getTweetCountAll(_ request: GetTweetsCountsAllRequestV2) -> TwitterAPISessionJSONTask { + return tweetCount.getTweetCountAll(request) + } + + // MARK: - UserAPIv2 + + public func getUser(_ request: GetUserRequestV2) -> TwitterAPISessionJSONTask { + return user.getUser(request) + } + public func getUsers(_ request: GetUsersRequestV2) -> TwitterAPISessionJSONTask { + return user.getUsers(request) + } + public func getUserByUsername(_ request: GetUsersByUsernameRequestV2) -> TwitterAPISessionJSONTask { + return user.getUserByUsername(request) + } + public func getUsersByUsernames(_ request: GetUsersByRequestV2) -> TwitterAPISessionJSONTask { + return user.getUsersByUsernames(request) + } + public func getMe(_ request: GetUsersMeRequestV2) -> TwitterAPISessionJSONTask { + return user.getMe(request) + } +} diff --git a/Sources/TwitterAPIKit/TwitterAPIClient.swift b/Sources/TwitterAPIKit/TwitterAPIClient.swift index 803dbd98..f2ede09e 100644 --- a/Sources/TwitterAPIKit/TwitterAPIClient.swift +++ b/Sources/TwitterAPIKit/TwitterAPIClient.swift @@ -27,9 +27,9 @@ open class TwitterAPIClient { configuration: configuration, environment: environment ) - self.auth = TwitterAuthAPIImpl(session: session) - v1 = TwitterAPIImplV1(session: session) - v2 = TwitterAPIImplV2(session: session) + self.auth = TwitterAuthAPI(session: session) + v1 = TwitterAPIv1(session: session) + v2 = TwitterAPIv2(session: session) } convenience public init( @@ -50,26 +50,9 @@ open class TwitterAPIClient { } } -extension TwitterAPIClient { - - class TwitterAuthAPIImpl { - let session: TwitterAPISession - init(session: TwitterAPISession) { - self.session = session - } - } - - class TwitterAPIImplV1 { - let session: TwitterAPISession - init(session: TwitterAPISession) { - self.session = session - } - } - - class TwitterAPIImplV2 { - let session: TwitterAPISession - init(session: TwitterAPISession) { - self.session = session - } +open class TwitterAPIBase { + public let session: TwitterAPISession + public init(session: TwitterAPISession) { + self.session = session } } diff --git a/flat-api.sh b/flat-api.sh new file mode 100755 index 00000000..65f2dba7 --- /dev/null +++ b/flat-api.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Usage: +# ./flat-api.sh: Generate Code +# ./flat-api.sh -c: Check if the code has already been generated. (For CI) + +if ! which sourcery > /dev/null; then + echo "warning: sourcery not installed, download from https://github.com/krzysztofzablocki/Sourcery" + exit 1 +fi + +while getopts c OPT +do + case $OPT in + "c" ) CHECK="TRUE" ;; + esac +done + +OUTPUT="Sources/TwitterAPIKit/TwitterAPI+Flat.generated.swift" + +sourcery --sources Sources/TwitterAPIKit --templates gen-flat-api.stencil --output ${OUTPUT} + +if [ "$CHECK" = "TRUE" ]; then + if ! git diff --exit-code ${OUTPUT} > /dev/null; then + echo "Error: There is a difference in ${OUTPUT}. Please generate code and commit." 1>&2 + exit 1 + fi +fi diff --git a/gen-flat-api.stencil b/gen-flat-api.stencil new file mode 100644 index 00000000..14ffe16b --- /dev/null +++ b/gen-flat-api.stencil @@ -0,0 +1,21 @@ +// swift-format-ignore-file +import Foundation +{% set Classes "TwitterAuthAPI,TwitterAPIv1,TwitterAPIv2"|split:"," %} +{% for apiClass in Classes %} + +extension {{apiClass}} { +{% for property in type[apiClass].variables %} + + // MARK: - {{property.typeName}} + + {% for method in property.type.methods where method.accessLevel == "public" %} + public func {{ method.name }}{{ ' async' if method.isAsync }}{{ ' throws' if method.throws }}{% if not method.returnTypeName.isVoid %} -> {{ method.returnTypeName }}{% endif %} { + {% if not method.returnTypeName.isVoid %}return {%endif%}{{property.name}}.{{method.callName}}({% for argument in method.parameters %}{%if argument.argumentLabel != nil%}{{argument.argumentLabel}}: {%endif%}{% if variable.name == argument.name %}{{variable.name}}{% else %}{{type.name|lowercase}}{{argument.name}}{% endif %}{{ ', ' if not forloop.last }}{% endfor %}) + } + {% endfor %} +{% endfor %} +} +{% endfor %} +{# Run +sourcery --sources Sources/TwitterAPIKit --templates gen-flat-api.stencil --output Sources/TwitterAPIKit/TwitterAPI+Flat.generated.swift +#} \ No newline at end of file