Skip to content

Commit 15a485f

Browse files
committed
Updated Agents.md file and removed unused function & updated tests accordingly
1 parent da26e7f commit 15a485f

11 files changed

Lines changed: 37 additions & 75 deletions

AGENTS.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,43 @@ This SDK uses **Universal Login** for MFA step-up flows. When an MFA-required er
143143

144144
See [Auth0.swift documentation](https://github.com/auth0/Auth0.swift) for detailed setup.
145145

146+
## MyAccount API Client — Required Pattern
147+
148+
**All My Account API calls MUST use `MyAccountClientFactory.create()` instead of calling `Auth0.myAccount()` directly.**
149+
150+
This factory attaches the `Auth0-Client` HTTP header that identifies requests as originating from the UI Components SDK. The library name and version are defined centrally in `Auth0UniversalComponents/Version.swift`:
151+
152+
```swift
153+
// Version.swift
154+
let version = "1.0.0"
155+
let libraryName = "universal-components-ios"
156+
```
157+
158+
### Correct Usage
159+
160+
```swift
161+
// In any UseCase
162+
let client = MyAccountClientFactory.create(
163+
token: apiCredentials.accessToken,
164+
domain: dependencies.domain,
165+
session: session
166+
)
167+
let result = try await client.authenticationMethods.enrollTOTP().start()
168+
```
169+
170+
### Incorrect Usage (will trigger SwiftLint error)
171+
172+
```swift
173+
// DO NOT use Auth0.myAccount() directly — this bypasses telemetry headers
174+
let client = Auth0.myAccount(token: token, domain: domain, session: session)
175+
```
176+
177+
### Lint Enforcement
178+
179+
A custom SwiftLint rule (`no_direct_myaccount_client`) in `.swiftlint.yml` enforces this at build time. Any direct call to `Auth0.myAccount(` outside of `MyAccountClientFactory.swift` will produce a compilation error.
180+
181+
---
182+
146183
## Key Technical Decisions
147184

148185
### UI Framework Support

Auth0UniversalComponents/Auth0UniversalComponentsSDKInitializer.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,6 @@ public actor Auth0UniversalComponentsSDKInitializer {
142142
tokenProvider: tokenProvider)
143143
}
144144

145-
/// Reset the SDK state for testing purposes.
146-
///
147-
/// Does not nil out the shared instance to avoid race conditions in parallel tests.
148-
/// The subsequent `initialize()` call will overwrite the instance completely.
149-
static func reset() {
150-
}
151145
}
152146

153147
/// Ensures a URL string has an HTTPS scheme.

Auth0UniversalComponentsTests/Passkeys/PasskeysEnrollmentViewModelTests.swift

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ struct PasskeysEnrollmentViewModelTests {
8585

8686
let mockTokenProvider = MockTokenProvider()
8787

88-
Auth0UniversalComponentsSDKInitializer.reset()
8988
Auth0UniversalComponentsSDKInitializer.initialize(
9089
session: makeMockSession(),
9190
bundle: .main,
@@ -110,7 +109,6 @@ struct PasskeysEnrollmentViewModelTests {
110109
let mockTokenProvider = MockTokenProvider()
111110
let mockDelegate = MockRefreshDelegate()
112111

113-
Auth0UniversalComponentsSDKInitializer.reset()
114112
Auth0UniversalComponentsSDKInitializer.initialize(
115113
session: makeMockSession(),
116114
bundle: .main,
@@ -135,7 +133,6 @@ struct PasskeysEnrollmentViewModelTests {
135133
let mockTokenProvider = MockTokenProvider()
136134
await NavigationStore.shared.reset()
137135

138-
Auth0UniversalComponentsSDKInitializer.reset()
139136
Auth0UniversalComponentsSDKInitializer.initialize(
140137
session: makeMockSession(),
141138
bundle: .main,
@@ -163,7 +160,6 @@ struct PasskeysEnrollmentViewModelTests {
163160
let mockTokenProvider = MockTokenProvider()
164161
await NavigationStore.shared.reset()
165162

166-
Auth0UniversalComponentsSDKInitializer.reset()
167163
Auth0UniversalComponentsSDKInitializer.initialize(
168164
session: makeMockSession(),
169165
bundle: .main,
@@ -202,7 +198,6 @@ struct PasskeysEnrollmentViewModelTests {
202198
let mockTokenProvider = MockTokenProvider()
203199
await NavigationStore.shared.reset()
204200

205-
Auth0UniversalComponentsSDKInitializer.reset()
206201
Auth0UniversalComponentsSDKInitializer.initialize(
207202
session: makeMockSession(),
208203
bundle: .main,
@@ -230,7 +225,6 @@ struct PasskeysEnrollmentViewModelTests {
230225

231226
let mockTokenProvider = MockTokenProvider()
232227

233-
Auth0UniversalComponentsSDKInitializer.reset()
234228
Auth0UniversalComponentsSDKInitializer.initialize(
235229
session: makeMockSession(),
236230
bundle: .main,
@@ -266,7 +260,6 @@ struct PasskeysEnrollmentViewModelTests {
266260

267261
let mockTokenProvider = MockTokenProvider()
268262

269-
Auth0UniversalComponentsSDKInitializer.reset()
270263
Auth0UniversalComponentsSDKInitializer.initialize(
271264
session: makeMockSession(),
272265
bundle: .main,

Auth0UniversalComponentsTests/RecoveryCode/RecoveryCodeEnrollmentViewModelTests.swift

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
7171
@Test func testInit_initialState() async {
7272
let mockTokenProvider = MockTokenProvider()
7373

74-
Auth0UniversalComponentsSDKInitializer.reset()
7574
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
7675

7776
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -85,7 +84,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
8584
@Test func testLoadData() async throws {
8685
let mockTokenProvider = MockTokenProvider()
8786
await NavigationStore.shared.reset()
88-
Auth0UniversalComponentsSDKInitializer.reset()
8987
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
9088

9189
let viewModel = await RecoveryCodeEnrollmentViewModel(startRecoveryCodeEnrollmentUseCase: StartRecoveryCodeEnrollmentUseCase(session: makeMockSession()), delegate: nil)
@@ -108,7 +106,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
108106
@Test func testConfirmEnrollment_success() async throws {
109107
let mockTokenProvider = MockTokenProvider()
110108
await NavigationStore.shared.reset()
111-
Auth0UniversalComponentsSDKInitializer.reset()
112109
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
113110

114111
let startRecoveryCodeEnrollmentUseCase = StartRecoveryCodeEnrollmentUseCase(session: makeMockSession())
@@ -157,7 +154,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
157154
let mockTokenProvider = MockTokenProvider()
158155
let mockDelegate = MockRefreshDelegate()
159156

160-
Auth0UniversalComponentsSDKInitializer.reset()
161157
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
162158

163159
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: mockDelegate)
@@ -173,7 +169,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
173169
let mockDelegate = MockRefreshDelegate()
174170
await NavigationStore.shared.reset()
175171

176-
Auth0UniversalComponentsSDKInitializer.reset()
177172
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
178173

179174
let startRecoveryCodeEnrollmentUseCase = StartRecoveryCodeEnrollmentUseCase(session: makeMockSession())
@@ -222,7 +217,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
222217
let mockTokenProvider = MockTokenProvider()
223218
await NavigationStore.shared.reset()
224219

225-
Auth0UniversalComponentsSDKInitializer.reset()
226220
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
227221

228222
let viewModel = await RecoveryCodeEnrollmentViewModel(
@@ -261,7 +255,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
261255
let mockTokenProvider = MockTokenProvider()
262256
await NavigationStore.shared.reset()
263257

264-
Auth0UniversalComponentsSDKInitializer.reset()
265258
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
266259

267260
let viewModel = await RecoveryCodeEnrollmentViewModel(
@@ -287,7 +280,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
287280
let mockTokenProvider = MockTokenProvider()
288281
await NavigationStore.shared.reset()
289282

290-
Auth0UniversalComponentsSDKInitializer.reset()
291283
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
292284

293285
let startRecoveryCodeEnrollmentUseCase = StartRecoveryCodeEnrollmentUseCase(session: makeMockSession())
@@ -343,7 +335,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
343335
let mockTokenProvider = MockTokenProvider()
344336
await NavigationStore.shared.reset()
345337

346-
Auth0UniversalComponentsSDKInitializer.reset()
347338
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
348339

349340
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -362,7 +353,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
362353
@Test func testHandle_setsLoaderToFalse() async {
363354
let mockTokenProvider = MockTokenProvider()
364355

365-
Auth0UniversalComponentsSDKInitializer.reset()
366356
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
367357

368358
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -388,7 +378,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
388378
@Test func testHandle_webAuthError() async {
389379
let mockTokenProvider = MockTokenProvider()
390380

391-
Auth0UniversalComponentsSDKInitializer.reset()
392381
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
393382

394383
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -410,7 +399,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
410399
@Test func testHandle_myAccountError() async {
411400
let mockTokenProvider = MockTokenProvider()
412401

413-
Auth0UniversalComponentsSDKInitializer.reset()
414402
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
415403

416404
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -433,7 +421,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
433421
@Test func testHandle_credentialsManagerError() async {
434422
let mockTokenProvider = MockTokenProvider()
435423

436-
Auth0UniversalComponentsSDKInitializer.reset()
437424
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
438425

439426
let viewModel = await RecoveryCodeEnrollmentViewModel(delegate: nil)
@@ -459,7 +446,6 @@ struct RecoveryCodeEnrollmentViewModelTests {
459446
let mockTokenProvider = MockTokenProvider()
460447
await NavigationStore.shared.reset()
461448

462-
Auth0UniversalComponentsSDKInitializer.reset()
463449
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
464450

465451
let startRecoveryCodeEnrollmentUseCase = StartRecoveryCodeEnrollmentUseCase(session: makeMockSession())

Auth0UniversalComponentsTests/SMSEmailEnrollment/EmailPhoneViewModelTests.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ struct EmailPhoneViewModelTests {
5252
@Test func testInit_initialState() async {
5353
let mockTokenProvider = MockTokenProvider()
5454

55-
Auth0UniversalComponentsSDKInitializer.reset()
5655
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
5756

5857
let viewModel = await EmailPhoneEnrollmentViewModel(type: .email)
@@ -67,7 +66,6 @@ struct EmailPhoneViewModelTests {
6766
@Test func testStartEnrollment_Phone_Success() async throws {
6867
let mockTokenProvider = MockTokenProvider()
6968
await NavigationStore.shared.reset()
70-
Auth0UniversalComponentsSDKInitializer.reset()
7169
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
7270

7371
let viewModel = await EmailPhoneEnrollmentViewModel(startPhoneEnrollmentUseCase: StartPhoneEnrollmentUseCase(session: makeMockSession()),
@@ -92,7 +90,6 @@ struct EmailPhoneViewModelTests {
9290
@Test func testStartEnrollment_Email_Success() async throws {
9391
let mockTokenProvider = MockTokenProvider()
9492
await NavigationStore.shared.reset()
95-
Auth0UniversalComponentsSDKInitializer.reset()
9693
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
9794

9895
let viewModel = await EmailPhoneEnrollmentViewModel(startEmailEnrollmentUseCase: StartEmailEnrollmentUseCase(session: makeMockSession()),
@@ -116,7 +113,6 @@ struct EmailPhoneViewModelTests {
116113

117114
@Test func navigationTitle() async {
118115
let mockTokenProvider = MockTokenProvider()
119-
Auth0UniversalComponentsSDKInitializer.reset()
120116
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
121117

122118
let viewModel = await EmailPhoneEnrollmentViewModel(type: .sms)
@@ -127,7 +123,6 @@ struct EmailPhoneViewModelTests {
127123

128124
@Test func title() async {
129125
let mockTokenProvider = MockTokenProvider()
130-
Auth0UniversalComponentsSDKInitializer.reset()
131126
Auth0UniversalComponentsSDKInitializer.initialize(session: makeMockSession(), bundle: .main, domain: mockDomain, clientId: "", audience: "\(mockDomain)/me/", tokenProvider: mockTokenProvider)
132127

133128
let viewModel = await EmailPhoneEnrollmentViewModel(type: .sms)

Auth0UniversalComponentsTests/SavedAuthenticators/MyAccountAuthMethodsViewModelTests.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ struct MyAccountAuthMethodsViewModelTests {
136136

137137
@Test
138138
func testInitialState() async {
139-
Auth0UniversalComponentsSDKInitializer.reset()
140139
Auth0UniversalComponentsSDKInitializer.initialize(
141140
session: makeMockSession(),
142141
bundle: .main,
@@ -155,7 +154,6 @@ struct MyAccountAuthMethodsViewModelTests {
155154
@Test
156155
func testFetchingOfAuthMethodsSuccess() async {
157156
let mockTokenProvider = MockTokenProvider()
158-
Auth0UniversalComponentsSDKInitializer.reset()
159157
Auth0UniversalComponentsSDKInitializer.initialize(
160158
session: makeMockSession(),
161159
bundle: .main,

0 commit comments

Comments
 (0)