import { FlinkPlugin } from "@flink-app/flink"; import { OidcPluginOptions } from "./OidcPluginOptions"; /** * OIDC Plugin Factory Function * * Creates a Flink plugin for OIDC authentication with generic IdP support. * Integrates with JWT Auth Plugin for token generation. * * @param options - OIDC plugin configuration options * @returns FlinkPlugin instance * * @example * ```typescript * import { jwtAuthPlugin } from '@flink-app/jwt-auth-plugin'; * import { oidcPlugin } from '@flink-app/oidc-plugin'; * * const app = new FlinkApp({ * auth: jwtAuthPlugin({ * secret: process.env.JWT_SECRET!, * getUser: async (tokenData) => { * return ctx.repos.userRepo.getById(tokenData.userId); * }, * rolePermissions: { * user: ['read:own'], * admin: ['read:all', 'write:all'] * } * }), * * plugins: [ * oidcPlugin({ * providers: { * acme: { * issuer: 'https://idp.acme.com', * clientId: process.env.OIDC_CLIENT_ID!, * clientSecret: process.env.OIDC_CLIENT_SECRET!, * callbackUrl: 'https://myapp.com/oidc/acme/callback', * discoveryUrl: 'https://idp.acme.com/.well-known/openid-configuration' * } * }, * onAuthSuccess: async ({ profile, claims, provider }, ctx) => { * // Find or create user (JIT provisioning) * let user = await ctx.repos.userRepo.getOne({ * 'oidcConnections.subject': claims.sub, * 'oidcConnections.issuer': claims.iss * }); * * if (!user) { * user = await ctx.repos.userRepo.create({ * email: claims.email, * name: claims.name, * oidcConnections: [{ * issuer: claims.iss, * subject: claims.sub, * provider * }] * }); * } * * // Generate JWT token * const token = await ctx.plugins.jwtAuth.createToken( * { userId: user._id, email: user.email }, * ['user'] * ); * * return { * user, * token, * redirectUrl: '/dashboard' * }; * } * }) * ] * }); * ``` */ export declare function oidcPlugin(options: OidcPluginOptions): FlinkPlugin; //# sourceMappingURL=OidcPlugin.d.ts.map