asgardeo / asgardeo/javascript

[Feature] Implement Multiton Pattern for Enhanced Instance Management in AsgardeoAuthClient

Abierto
#368 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Type/Improvement
Lenguaje dominante
TypeScript
Estrellas
18
Forks
67
Merge medio
4 h 6 min
PR fusionados (30 d)
13

Descripción

### Current Limitation

The `AsgardeoAuthClient ` currently relies on a public constructor, allowing for the uncontrolled creation of multiple instances without a centralized management system. Unlike the browser-specific implementations in the SDK ecosystem, there is no static mechanism to track, retrieve, or properly dispose of active client instances.

This lack of lifecycle management creates several issues:

- Inconsistency: It diverges from the architectural patterns used elsewhere in the SDK, leading to a fragmented developer experience.
- Resource Management: There is no standard way to destroy an instance or clear its session data, which poses risks for memory leaks.
- Multi-tenancy issues: Applications needing multiple isolated authentication contexts (e.g., distinct organization sessions) have no reliable way to manage and access specific instances by ID.
- Testing challenges: Without a way to destroyAllInstances(), ensuring a clean state between unit tests is difficult.

### Suggested Improvement

Refactor the AsgardeoAuthClient to implement the Multiton Pattern. This involves restricting direct instantiation and managing instances via a static internal map.

Specific changes recommended:

- Protected Constructor: Change the constructor visibility to protected to prevent direct usage of new AsgardeoAuthClient().
- Static Instance Map: Introduce a static Map to store active instances.
- Factory Method: Implement a static getInstance(id?: number) method that creates a new instance only if one does not exist for the given ID.
- Lifecycle Methods: Add utility methods to support proper cleanup:
- destroyInstance(id)
- destroyAllInstances()
- hasInstance(id)

### Please select the package issue is related to

@asgardeo/javascript

### Version

N/A

### Reporter Checklist

- [x] I have searched the existing issues and this is not a duplicate.
- [x] I have provided all the necessary information.
- [x] I have verified the improvement is not available in the latest version of the package.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza localizando AsgardeoAuthClient en el paquete @asgardeo/javascript y revisando las implementaciones del SDK específicas para navegador a las que hace referencia el issue. Confirma el diseño necesario para la construcción protegida, la recuperación de instancias mediante ID y la limpieza del ciclo de vida; se considera terminado cuando getInstance, destroyInstance, destroyAllInstances y hasInstance admiten clientes aislados y un estado de pruebas limpio.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
authentication
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.