@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
65 lines (50 loc) • 1.99 kB
text/typescript
import debug from 'debug';
import { createContextForInteractionDetails } from '@/libs/oidc-provider/http-adapter';
import { OIDCProvider } from '@/libs/oidc-provider/provider';
import { getOIDCProvider } from './oidcProvider';
const log = debug('lobe-oidc:service');
export class OIDCService {
private provider: OIDCProvider;
constructor(provider: OIDCProvider) {
this.provider = provider;
}
static async initialize() {
const provider = await getOIDCProvider();
return new OIDCService(provider);
}
async getInteractionDetails(uid: string) {
const { req, res } = await createContextForInteractionDetails(uid);
return this.provider.interactionDetails(req, res);
}
async getInteractionResult(uid: string, result: any) {
const { req, res } = await createContextForInteractionDetails(uid);
return this.provider.interactionResult(req, res, result);
}
async finishInteraction(uid: string, result: any) {
const { req, res } = await createContextForInteractionDetails(uid);
return this.provider.interactionFinished(req, res, result, { mergeWithLastSubmission: true });
}
async findOrCreateGrants(accountId: string, clientId: string, existingGrantId?: string) {
// 2. 查找或创建 Grant 对象
let grant;
if (existingGrantId) {
// 如果之前的交互步骤已经关联了 Grant
grant = await this.provider.Grant.find(existingGrantId);
log('Found existing grantId: %s', existingGrantId);
}
if (!grant) {
// 如果没有找到或没有 existingGrantId,则创建新的
grant = new this.provider.Grant({
accountId: accountId,
clientId: clientId,
});
log('Created new Grant for account %s and client %s', accountId, clientId);
}
return grant;
}
async getClientMetadata(clientId: string) {
const client = await this.provider.Client.find(clientId);
return client?.metadata();
}
}
export { getOIDCProvider } from './oidcProvider';