@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
191 lines • 8.12 kB
JavaScript
/**
* AuthProviderRegistry - Static one-shot registry for authentication providers
*
* Matches the ProviderRegistry pattern: static class with a single
* `registerAllProviders()` entry point that registers all 11 auth
* providers with AuthProviderFactory using dynamic imports.
*/
import { logger } from "../utils/logger.js";
import { AuthProviderFactory } from "./AuthProviderFactory.js";
/**
* Narrow `AuthProviderConfig` to a specific provider variant.
*
* Each factory lambda calls this to assert the config is the expected
* variant — safe because the factory is only ever invoked with a config
* whose `type` matches the registered provider key.
*/
function narrowConfig(config) {
return config;
}
/**
* AuthProviderRegistry - registers all auth providers with the factory
*
* Call `AuthProviderRegistry.registerAllProviders()` once during
* application startup. The method is idempotent and concurrency-safe.
*/
export class AuthProviderRegistry {
static registered = false;
static registrationPromise = null;
/**
* Register all auth providers with the factory
*/
static async registerAllProviders() {
if (AuthProviderRegistry.registered) {
return;
}
if (AuthProviderRegistry.registrationPromise) {
return AuthProviderRegistry.registrationPromise;
}
AuthProviderRegistry.registrationPromise =
AuthProviderRegistry._doRegister();
try {
await AuthProviderRegistry.registrationPromise;
AuthProviderRegistry.registered = true;
}
catch (error) {
AuthProviderRegistry.registrationPromise = null;
throw error;
}
}
/**
* Internal registration implementation
*/
static async _doRegister() {
// Auth0 Provider
AuthProviderFactory.registerProvider("auth0", async (config) => {
const { Auth0Provider } = await import("./providers/auth0.js");
return new Auth0Provider(narrowConfig(config));
}, ["auth0-jwt", "auth0-oauth"], {
type: "auth0",
name: "Auth0",
description: "Auth0 identity platform integration",
documentation: "https://auth0.com/docs",
aliases: ["auth0-jwt", "auth0-oauth"],
});
// Clerk Provider
AuthProviderFactory.registerProvider("clerk", async (config) => {
const { ClerkProvider } = await import("./providers/clerk.js");
return new ClerkProvider(narrowConfig(config));
}, ["clerk-jwt"], {
type: "clerk",
name: "Clerk",
description: "Clerk authentication platform integration",
documentation: "https://clerk.com/docs",
aliases: ["clerk-jwt"],
});
// Firebase Provider
AuthProviderFactory.registerProvider("firebase", async (config) => {
const { FirebaseAuthProvider } = await import("./providers/firebase.js");
return new FirebaseAuthProvider(narrowConfig(config));
}, ["firebase-auth", "google-firebase"], {
type: "firebase",
name: "Firebase",
description: "Firebase Authentication integration",
documentation: "https://firebase.google.com/docs/auth",
aliases: ["firebase-auth", "google-firebase"],
});
// Supabase Provider
AuthProviderFactory.registerProvider("supabase", async (config) => {
const { SupabaseAuthProvider } = await import("./providers/supabase.js");
return new SupabaseAuthProvider(narrowConfig(config));
}, ["supabase-auth"], {
type: "supabase",
name: "Supabase",
description: "Supabase Auth integration",
documentation: "https://supabase.com/docs/guides/auth",
aliases: ["supabase-auth"],
});
// AWS Cognito Provider
AuthProviderFactory.registerProvider("cognito", async (config) => {
const { CognitoProvider } = await import("./providers/CognitoProvider.js");
return new CognitoProvider(config);
}, ["aws-cognito", "amazon-cognito"], {
type: "cognito",
name: "AWS Cognito",
description: "Amazon Cognito User Pools integration",
documentation: "https://docs.aws.amazon.com/cognito",
aliases: ["aws-cognito", "amazon-cognito"],
});
// Keycloak Provider
AuthProviderFactory.registerProvider("keycloak", async (config) => {
const { KeycloakProvider } = await import("./providers/KeycloakProvider.js");
return new KeycloakProvider(config);
}, ["keycloak-oidc"], {
type: "keycloak",
name: "Keycloak",
description: "Keycloak OpenID Connect integration",
documentation: "https://www.keycloak.org/documentation",
aliases: ["keycloak-oidc"],
});
// Better Auth Provider
AuthProviderFactory.registerProvider("better-auth", async (config) => {
const { BetterAuthProvider } = await import("./providers/betterAuth.js");
return new BetterAuthProvider(narrowConfig(config));
}, ["betterauth", "better_auth"], {
type: "better-auth",
name: "Better Auth",
description: "Self-hosted open-source authentication solution",
documentation: "https://better-auth.com/docs",
aliases: ["betterauth", "better_auth"],
});
// WorkOS Provider
AuthProviderFactory.registerProvider("workos", async (config) => {
const { WorkOSProvider } = await import("./providers/workos.js");
return new WorkOSProvider(narrowConfig(config));
}, ["workos-sso", "work-os"], {
type: "workos",
name: "WorkOS",
description: "Enterprise SSO and user management",
documentation: "https://workos.com/docs",
aliases: ["workos-sso", "work-os"],
});
// OAuth2 Provider
AuthProviderFactory.registerProvider("oauth2", async (config) => {
const { OAuth2Provider } = await import("./providers/oauth2.js");
return new OAuth2Provider(narrowConfig(config));
}, ["oauth", "oidc", "openid-connect"], {
type: "oauth2",
name: "OAuth2",
description: "Generic OAuth2/OIDC provider with JWKS and userinfo support",
documentation: "https://oauth.net/2/",
aliases: ["oauth", "oidc", "openid-connect"],
});
// JWT Provider
AuthProviderFactory.registerProvider("jwt", async (config) => {
const { JWTProvider } = await import("./providers/jwt.js");
return new JWTProvider(narrowConfig(config));
}, ["jwt-auth", "jwt-token"], {
type: "jwt",
name: "JWT",
description: "Generic JWT token validation with symmetric/asymmetric keys",
documentation: "https://jwt.io/",
aliases: ["jwt-auth", "jwt-token"],
});
// Custom Provider
AuthProviderFactory.registerProvider("custom", async (config) => {
const { CustomAuthProvider } = await import("./providers/custom.js");
return new CustomAuthProvider(narrowConfig(config));
}, ["custom-auth"], {
type: "custom",
name: "Custom",
description: "Custom authentication with user-provided validation logic",
aliases: ["custom-auth"],
});
logger.debug("All auth providers registered");
}
/**
* Check if providers are registered
*/
static isRegistered() {
return AuthProviderRegistry.registered;
}
/**
* Clear registrations (for testing)
*/
static clearRegistrations() {
AuthProviderRegistry.registered = false;
AuthProviderRegistry.registrationPromise = null;
AuthProviderFactory.clearRegistrations();
}
}
//# sourceMappingURL=AuthProviderRegistry.js.map