chore: initialize recovered claude workspace
This commit is contained in:
81
src/utils/awsAuthStatusManager.ts
Normal file
81
src/utils/awsAuthStatusManager.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* Singleton manager for cloud-provider authentication status (AWS Bedrock,
|
||||
* GCP Vertex). Communicates auth refresh state between auth utilities and
|
||||
* React components / SDK output. The SDK 'auth_status' message shape is
|
||||
* provider-agnostic, so a single manager serves all providers.
|
||||
*
|
||||
* Legacy name: originally AWS-only; now used by all cloud auth refresh flows.
|
||||
*/
|
||||
|
||||
import { createSignal } from './signal.js'
|
||||
|
||||
export type AwsAuthStatus = {
|
||||
isAuthenticating: boolean
|
||||
output: string[]
|
||||
error?: string
|
||||
}
|
||||
|
||||
export class AwsAuthStatusManager {
|
||||
private static instance: AwsAuthStatusManager | null = null
|
||||
private status: AwsAuthStatus = {
|
||||
isAuthenticating: false,
|
||||
output: [],
|
||||
}
|
||||
private changed = createSignal<[status: AwsAuthStatus]>()
|
||||
|
||||
static getInstance(): AwsAuthStatusManager {
|
||||
if (!AwsAuthStatusManager.instance) {
|
||||
AwsAuthStatusManager.instance = new AwsAuthStatusManager()
|
||||
}
|
||||
return AwsAuthStatusManager.instance
|
||||
}
|
||||
|
||||
getStatus(): AwsAuthStatus {
|
||||
return {
|
||||
...this.status,
|
||||
output: [...this.status.output],
|
||||
}
|
||||
}
|
||||
|
||||
startAuthentication(): void {
|
||||
this.status = {
|
||||
isAuthenticating: true,
|
||||
output: [],
|
||||
}
|
||||
this.changed.emit(this.getStatus())
|
||||
}
|
||||
|
||||
addOutput(line: string): void {
|
||||
this.status.output.push(line)
|
||||
this.changed.emit(this.getStatus())
|
||||
}
|
||||
|
||||
setError(error: string): void {
|
||||
this.status.error = error
|
||||
this.changed.emit(this.getStatus())
|
||||
}
|
||||
|
||||
endAuthentication(success: boolean): void {
|
||||
if (success) {
|
||||
// Clear the status completely on success
|
||||
this.status = {
|
||||
isAuthenticating: false,
|
||||
output: [],
|
||||
}
|
||||
} else {
|
||||
// Keep the output visible on failure
|
||||
this.status.isAuthenticating = false
|
||||
}
|
||||
this.changed.emit(this.getStatus())
|
||||
}
|
||||
|
||||
subscribe = this.changed.subscribe
|
||||
|
||||
// Clean up for testing
|
||||
static reset(): void {
|
||||
if (AwsAuthStatusManager.instance) {
|
||||
AwsAuthStatusManager.instance.changed.clear()
|
||||
AwsAuthStatusManager.instance = null
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user