@shard-auth/client
Version:
Next-generation API authentication without secret keys - MPC-based authentication with FROST threshold signatures
69 lines • 2.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignatureSessionManager = void 0;
const crypto_1 = __importDefault(require("crypto"));
class SignatureSessionManager {
sessions = new Map();
sessionTimeout = 60000; // 60秒
createSession(requestDetails, clientNonceCommitment, serverNonce, serverNonceCommitment) {
const sessionId = this.generateSessionId();
const now = new Date();
const expiresAt = new Date(now.getTime() + this.sessionTimeout);
const session = {
sessionId,
clientNonceCommitment,
serverNonceCommitment,
serverNonce,
requestDetails,
createdAt: now,
expiresAt,
used: false
};
this.sessions.set(sessionId, session);
this.scheduleCleanup(sessionId, this.sessionTimeout);
return session;
}
getSession(sessionId) {
const session = this.sessions.get(sessionId);
if (!session) {
return undefined;
}
// 期限切れチェック(削除せずに返す)
// handleCompleteSignatureで適切なエラーメッセージを返すため
return session;
}
markSessionUsed(sessionId) {
const session = this.sessions.get(sessionId);
if (session) {
session.used = true;
}
}
isSessionValid(sessionId) {
const session = this.getSession(sessionId);
return session !== undefined && !session.used;
}
expireSession(sessionId) {
const session = this.sessions.get(sessionId);
if (session) {
// セッションを削除せずに、期限切れにする
session.expiresAt = new Date(Date.now() - 1000); // 1秒前に期限切れ
}
}
generateSessionId() {
return 'sig_' + crypto_1.default.randomBytes(16).toString('hex');
}
scheduleCleanup(sessionId, timeout) {
setTimeout(() => {
this.sessions.delete(sessionId);
}, timeout);
}
// テスト用メソッド
clearAllSessions() {
this.sessions.clear();
}
}
exports.SignatureSessionManager = SignatureSessionManager;
//# sourceMappingURL=signature-session.js.map