asgardeo / asgardeo/javascript
[Feature] Implement Multiton Pattern for Enhanced Instance Management in AsgardeoAuthClient
- 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
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