Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 2x 2x 9x 6x 2x 4x 4x 2x 1x 1x 2x 1x 1x 2x | import { Base64 } from '../utils/base64';
import { CryptoKeyPair } from '../utils/cryptography';
import { Logger } from '../utils/logger';
import { newError } from '../utils/new-error';
/**
* Configuration interface for the session service.
* Defines the cryptographic keys required for session initialization.
*/
export type SessionServiceConfig = {
/**
* Cryptographic key pair used for signing operations.
* Essential for verifying the identity of the current user.
*/
signingKeyPair?: CryptoKeyPair;
};
/**
* Service interface for managing user session information.
* Provides access to the cryptographic identity of the current user.
*/
export interface SessionService {
/**
* Initializes the session service with the provided configuration.
* Sets up the signing key pair for the current session.
*
* @param config - Configuration with the signing key pair
* @returns Promise that resolves when initialization is complete
* @throws Error if the signing key pair is missing
*/
initialize(config: SessionServiceConfig): Promise<void>;
/**
* Gets the signing key pair for the current session.
*
* @returns The cryptographic key pair used for signing operations
* @throws Error if the signing key pair has not been initialized
*/
get signingKeyPair(): CryptoKeyPair;
/**
* Gets the Base64-encoded public signing key.
* This is the user's public identity that can be shared with others.
*
* @returns The Base64-encoded public signing key
* @throws Error if the signing key pair has not been initialized
*/
get signingPublicKeyBase64(): string;
/**
* Gets the Base64-encoded public signing key, if available.
* Returns undefined instead of throwing an error if the key is not initialized.
*
* @returns The Base64-encoded public signing key or undefined
*/
get signingPublicKeyBase64Safe(): string | undefined;
}
/**
* Factory function that creates and returns an implementation of the SessionService interface.
* Manages the user's cryptographic identity throughout the application.
*
* @param logger - Logger instance for error and debugging information
* @param base64 - Base64 utility for encoding/decoding operations
* @returns An implementation of the SessionService interface
*/
export function getSessionService(logger: Logger, base64: Base64): SessionService {
let signingKeyPair: CryptoKeyPair | undefined;
return {
async initialize(config: SessionServiceConfig): Promise<void> {
if (config.signingKeyPair === undefined || config.signingKeyPair === null) {
throw newError(logger, '[session-service] Failed to initialize. Incomplete signing key pair.');
} else {
signingKeyPair = config.signingKeyPair;
logger.debug('[session-service] Signing key pair found.');
}
},
get signingKeyPair(): CryptoKeyPair {
if (!signingKeyPair) {
throw newError(logger, '[session-service] Sign key pair has not initialized yet.');
}
return signingKeyPair;
},
get signingPublicKeyBase64(): string {
if (!signingKeyPair) {
throw newError(logger, '[session-service] Sign key pair has not initialized yet.');
}
return base64.encode(signingKeyPair.publicKey);
},
get signingPublicKeyBase64Safe(): string | undefined {
return signingKeyPair && base64.encode(signingKeyPair.publicKey);
},
};
}
|