-
-
Notifications
You must be signed in to change notification settings - Fork 33
Description
Summary
No response
Pain points
The current implementation of ATProtoKit lacks a centralized logging mechanism, leading to several challenges, namely that debugging is much more difficult to deal with.
To solve this, SwiftLog will be integrated into the package. Furthermore, two logging backend implementations will be used: one that maps to Apple's unified Logger framework (for Apple platforms) and one that maps to the standard SwiftLog logger.
To be more specific, log events for the methods should be added as appropriate. As an example, take a look at applyWrites():
public func applyWrites(_ repositoryDID: String,
shouldValidate: Bool? = true,
writes: [ApplyWritesUnion],
swapCommit: String?) async throws {
guard session != nil,
let accessToken = session?.accessToken else {
throw ATRequestPrepareError.missingActiveSession
}
guard let sessionURL = session?.pdsURL,
let requestURL = URL(string: "\(sessionURL)/xrpc/com.atproto.repo.applyWrites") else {
throw ATRequestPrepareError.invalidRequestURL
}
let requestBody = RepoApplyWrites(
repositoryDID: repositoryDID,
shouldValidate: shouldValidate,
writes: writes,
swapCommit: swapCommit
)
do {
let request = APIClientService.createRequest(forRequest: requestURL,
andMethod: .post,
acceptValue: nil,
contentTypeValue: "application/json",
authorizationValue: "Bearer \(accessToken)")
try await APIClientService.sendRequest(request,
withEncodingBody: requestBody)
} catch {
throw error
}
}Various places within the method can have log events, including:
- Within the first
guardstatement'selseblock, stating thatsessionoraccessTokendoesn't have a value. - After the
guardstatement which would show the value ofaccessToken(albeit, obfuscated). - Within the second
guardstatement'selseblock, stating that there's an invalid request URL, followed by aString(describing:)of the request URL. - After the
guardstatement, which would show the value ofrequestURL. - After
requestBody, which would show the values ofrequestBody. - After
request, which would show the value ofrequest. - After the
try awaitcode, which would say that the request has been successful. - Within the
catchblock, which gives an error log, followed by displaying the error itself.
This issue will focus on implementing log events to the ATProtoKit, ATProtoTools, and ATProtoAdmin classes. Future updates will deal with the remaining parts of the Swift package.
Considered Alternatives
No response
Is this a breaking change?
Yes
Additional Context
- Implement log events on all parts of the
ATProtoKitclass. - Implement log events on all parts of the
ATProtoAdminclass. - Implement log events on all parts of the
ATProtoToolsclass.