UNPKG

@shard-auth/client

Version:

Next-generation API authentication without secret keys - MPC-based authentication with FROST threshold signatures

69 lines 2.42 kB
"use strict"; 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