Skip to content

Commit 93a3104

Browse files
committed
Add async initializer to main class
1 parent fff7ffb commit 93a3104

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

Sources/ATProtoKit/ATProtoKit.swift

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ extension ATProtoKitConfiguration {
111111
/// try await config.authenticate()
112112
///
113113
/// print("Access token: \(session.accessToken)")
114+
///
115+
/// let atProtoKit = try await ATProtoKit(sessionConfiguration: config)
114116
/// } catch {
115117
/// print("Error: \(error)")
116118
/// }
@@ -167,18 +169,36 @@ public class ATProtoKit: ATProtoKitConfiguration, ATRecordConfiguration {
167169
self.sessionConfiguration = sessionConfiguration
168170
self.logger = session?.logger
169171

170-
// Mark the beginning of registration.
171-
// This is to fix a bug from the following issue: https://github.com/MasterJ93/ATProtoKit/issues/75
172-
// as well as this issue: https://github.com/MasterJ93/ATProtoKit/issues/102
173-
ATRecordTypeRegistry.registrationGroup.enter()
174-
175172
Task { [recordLexicons] in
176173
if canUseBlueskyRecords && !(ATRecordTypeRegistry.areBlueskyRecordsRegistered) {
177174
_ = await ATRecordTypeRegistry.shared.register(blueskyLexiconTypes: recordLexicons)
178175
}
176+
}
177+
}
178+
179+
/// Initializes a new, asyncronous instance of `ATProtoKit`.
180+
///
181+
/// This will also handle some of the logging-related setup. The identifier will either be your
182+
/// project's `CFBundleIdentifier` or an identifier named
183+
/// `com.cjrriley.ATProtoKit`. However, you can manually override this.
184+
///
185+
/// If you're using methods such as
186+
/// ``ATProtoKit/ATProtoKit/createAccount(email:handle:existingDID:inviteCode:verificationCode:verificationPhone:password:recoveryKey:plcOperation:pdsURL:)``
187+
/// or ``ATProtoKit/ATProtoKit/getSession(by:pdsURL:)``, be sure to set
188+
/// `canUseBlueskyRecords` to false. While the initializer does check to see if the records
189+
/// have been added, it's best not to invoke it, esepcially if you're using ATProtoKit for a
190+
/// generic AT Protocol service that doesn't use Bluesky records.
191+
///
192+
/// - Parameters:
193+
/// - sessionConfiguration: The authenticated user session within the AT Protocol. Optional.
194+
/// - canUseBlueskyRecords: Indicates whether Bluesky's lexicons should be used.
195+
/// Defaults to `true`.
196+
public init(sessionConfiguration: SessionConfiguration? = nil, canUseBlueskyRecords: Bool = true) async {
197+
self.sessionConfiguration = sessionConfiguration
198+
self.logger = session?.logger
179199

180-
// Registration complete – signal waiting threads.
181-
ATRecordTypeRegistry.registrationGroup.leave()
200+
if canUseBlueskyRecords && !(ATRecordTypeRegistry.areBlueskyRecordsRegistered) {
201+
_ = await ATRecordTypeRegistry.shared.register(blueskyLexiconTypes: recordLexicons)
182202
}
183203
}
184204

Sources/ATProtoKit/Models/Common/ATRecordViewProtocol/ATRecordViewProtocolExtensions.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ extension AppBskyLexicon.Feed.PostViewDefinition: ATRecordViewProtocol {
1313
let config = ATProtocolConfiguration(userSession: session, pdsURL: session.pdsURL ?? "https://bsky.social")
1414
_ = try await config.getSession()
1515

16-
let atProto = ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
16+
let atProto = await ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
1717
let record = try await atProto.getPosts([self.uri])
1818

1919
return record.posts[0]
@@ -30,7 +30,7 @@ extension AppBskyLexicon.Feed.GeneratorViewDefinition: ATRecordViewProtocol {
3030
let config = ATProtocolConfiguration(userSession: session, pdsURL: session.pdsURL ?? "https://bsky.social")
3131
_ = try await config.getSession()
3232

33-
let atProto = ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
33+
let atProto = await ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
3434
let record = try await atProto.getFeedGenerator(by: self.feedURI)
3535

3636
return record.view
@@ -43,7 +43,7 @@ extension AppBskyLexicon.Graph.ListViewDefinition: ATRecordViewProtocol {
4343
let config = ATProtocolConfiguration(userSession: session, pdsURL: session.pdsURL ?? "https://bsky.social")
4444
_ = try await config.getSession()
4545

46-
let atProto = ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
46+
let atProto = await ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
4747
let record = try await atProto.getList(from: self.uri)
4848

4949
return record.list
@@ -56,7 +56,7 @@ extension AppBskyLexicon.Graph.StarterPackViewDefinition: ATRecordViewProtocol {
5656
let config = ATProtocolConfiguration(userSession: session, pdsURL: session.pdsURL ?? "https://bsky.social")
5757
_ = try await config.getSession()
5858

59-
let atProto = ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
59+
let atProto = await ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
6060
let record = try await atProto.getStarterPack(uri: self.uri)
6161

6262
return record.starterPack
@@ -73,7 +73,7 @@ extension AppBskyLexicon.Feed.FeedViewPostDefinition: ATRecordViewProtocol {
7373
let config = ATProtocolConfiguration(userSession: session, pdsURL: session.pdsURL ?? "https://bsky.social")
7474
_ = try await config.getSession()
7575

76-
let atProto = ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
76+
let atProto = await ATProtoKit(sessionConfiguration: config, canUseBlueskyRecords: false)
7777
let record = try await atProto.getFeed(by: self.post.uri)
7878

7979
return record.feed[0]

0 commit comments

Comments
 (0)