import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
import { ConfigManager } from './config.js';
export class AuthManager {
constructor() {
this.tokenInfo = null;
this.apiKey = null;
this.configManager = new ConfigManager();
// 从配置中加载API key
const savedApiKey = this.configManager.getApiKey();
if (savedApiKey) {
this.setApiKey(savedApiKey);
}
}
setApiKey(apiKey) {
this.apiKey = apiKey;
// 保存到配置文件
this.configManager.setApiKey(apiKey);
// 由于Figma个人访问令牌不会过期,我们设置一个很远的过期日期
this.tokenInfo = {
accessToken: apiKey,
expiresAt: Date.now() + (365 * 24 * 60 * 60 * 1000) // 1年后
};
}
async getAccessToken() {
// 检查我们是否有有效的令牌
if (this.tokenInfo && Date.now() < this.tokenInfo.expiresAt) {
return this.tokenInfo.accessToken;
}
// 如果没有设置API key,尝试从配置中重新加载
if (!this.apiKey) {
const savedApiKey = this.configManager.getApiKey();
if (savedApiKey) {
this.setApiKey(savedApiKey);
return savedApiKey;
}
throw new McpError(ErrorCode.InvalidParams, 'No Figma API key provided. Use the set_api_key tool first.');
}
// 返回API key作为令牌
return this.apiKey;
}
}