@ultipa-graph/ultipa-driver
Version:
NodeJS SDK for Ultipa GQL
72 lines • 8.8 kB
JavaScript
;
/**
* Session service handles authentication and session lifecycle.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.SessionService = void 0;
const errors_1 = require("../errors");
const services_1 = require("../services");
/**
* Session service for authentication and session management.
*/
class SessionService {
ctx;
constructor(ctx) {
this.ctx = ctx;
}
/**
* Authenticate the user and create a session.
*/
async login(username, password, defaultGraph) {
const request = {
username,
password,
default_graph: defaultGraph || '',
};
try {
const response = await (0, services_1.promisifyCall)(this.ctx.clients.sessionService, 'Login', request);
// Prefer the server's authoritative LoginResponse.current_graph
// (new servers always populate it — equals the validated
// defaultGraph or empty). Falls back to the request value for
// older servers that don't populate the field.
const serverCurrent = response.current_graph || '';
const effectiveGraph = serverCurrent || defaultGraph || '';
const session = this.ctx.sessions.login(parseInt(response.session_id || '0', 10), response.server_version || '', response.roles || [], effectiveGraph, {
isCluster: response.is_cluster || false,
clusterId: response.cluster_id || '',
partitionCount: response.partition_count || 0,
});
return session;
}
catch (error) {
throw new errors_1.LoginFailedError(error.message || 'Login failed');
}
}
/**
* Terminate the current session.
*/
async logout() {
if (!this.ctx.sessions.isLoggedIn())
return;
try {
const metadata = this.ctx.getSessionMetadata();
await (0, services_1.promisifyCall)(this.ctx.clients.sessionService, 'Logout', {}, metadata);
}
catch (e) {
// Ignore logout errors
}
this.ctx.txManager.clearAll();
this.ctx.sessions.logout();
}
/**
* Check the connection and return the latency in nanoseconds.
*/
async ping() {
const metadata = this.ctx.getSessionMetadata();
const response = await (0, services_1.promisifyCall)(this.ctx.clients.sessionService, 'Ping', {}, metadata);
this.ctx.updateActivity();
return parseInt(response.latency_ns || '0', 10);
}
}
exports.SessionService = SessionService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUlILHNDQUE2QztBQUM3QywwQ0FBNEM7QUFFNUM7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFDTDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxZQUFvQjtRQUNsRSxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVE7WUFDUixRQUFRO1lBQ1IsYUFBYSxFQUFFLFlBQVksSUFBSSxFQUFFO1NBQ2xDLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUMvQixPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUM7WUFFRixnRUFBZ0U7WUFDaEUseURBQXlEO1lBQ3pELDhEQUE4RDtZQUM5RCwrQ0FBK0M7WUFDL0MsTUFBTSxhQUFhLEdBQVcsUUFBUSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDM0QsTUFBTSxjQUFjLEdBQUcsYUFBYSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUM7WUFFM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUNyQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ3hDLFFBQVEsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUM3QixRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFDcEIsY0FBYyxFQUNkO2dCQUNFLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUs7Z0JBQ3ZDLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ3BDLGNBQWMsRUFBRSxRQUFRLENBQUMsZUFBZSxJQUFJLENBQUM7YUFDOUMsQ0FDRixDQUFDO1lBRUYsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLHlCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFFNUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBQSx3QkFBYSxFQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQy9CLFFBQVEsRUFDUixFQUFFLEVBQ0YsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLHVCQUF1QjtRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0MsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFBLHdCQUFhLEVBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFDL0IsTUFBTSxFQUNOLEVBQUUsRUFDRixRQUFRLENBQ1QsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBbkZELHdDQW1GQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2Vzc2lvbiBzZXJ2aWNlIGhhbmRsZXMgYXV0aGVudGljYXRpb24gYW5kIHNlc3Npb24gbGlmZWN5Y2xlLlxuICovXG5cbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnLi9zZXJ2aWNlLWNvbnRleHQnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4uL3Nlc3Npb24nO1xuaW1wb3J0IHsgTG9naW5GYWlsZWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBwcm9taXNpZnlDYWxsIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIFNlc3Npb24gc2VydmljZSBmb3IgYXV0aGVudGljYXRpb24gYW5kIHNlc3Npb24gbWFuYWdlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGUgdGhlIHVzZXIgYW5kIGNyZWF0ZSBhIHNlc3Npb24uXG4gICAqL1xuICBhc3luYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBkZWZhdWx0R3JhcGg6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvbj4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICB1c2VybmFtZSxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgZGVmYXVsdF9ncmFwaDogZGVmYXVsdEdyYXBoIHx8ICcnLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICAgIHRoaXMuY3R4LmNsaWVudHMuc2Vzc2lvblNlcnZpY2UsXG4gICAgICAgICdMb2dpbicsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgICk7XG5cbiAgICAgIC8vIFByZWZlciB0aGUgc2VydmVyJ3MgYXV0aG9yaXRhdGl2ZSBMb2dpblJlc3BvbnNlLmN1cnJlbnRfZ3JhcGhcbiAgICAgIC8vIChuZXcgc2VydmVycyBhbHdheXMgcG9wdWxhdGUgaXQg4oCUIGVxdWFscyB0aGUgdmFsaWRhdGVkXG4gICAgICAvLyBkZWZhdWx0R3JhcGggb3IgZW1wdHkpLiBGYWxscyBiYWNrIHRvIHRoZSByZXF1ZXN0IHZhbHVlIGZvclxuICAgICAgLy8gb2xkZXIgc2VydmVycyB0aGF0IGRvbid0IHBvcHVsYXRlIHRoZSBmaWVsZC5cbiAgICAgIGNvbnN0IHNlcnZlckN1cnJlbnQ6IHN0cmluZyA9IHJlc3BvbnNlLmN1cnJlbnRfZ3JhcGggfHwgJyc7XG4gICAgICBjb25zdCBlZmZlY3RpdmVHcmFwaCA9IHNlcnZlckN1cnJlbnQgfHwgZGVmYXVsdEdyYXBoIHx8ICcnO1xuXG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMubG9naW4oXG4gICAgICAgIHBhcnNlSW50KHJlc3BvbnNlLnNlc3Npb25faWQgfHwgJzAnLCAxMCksXG4gICAgICAgIHJlc3BvbnNlLnNlcnZlcl92ZXJzaW9uIHx8ICcnLFxuICAgICAgICByZXNwb25zZS5yb2xlcyB8fCBbXSxcbiAgICAgICAgZWZmZWN0aXZlR3JhcGgsXG4gICAgICAgIHtcbiAgICAgICAgICBpc0NsdXN0ZXI6IHJlc3BvbnNlLmlzX2NsdXN0ZXIgfHwgZmFsc2UsXG4gICAgICAgICAgY2x1c3RlcklkOiByZXNwb25zZS5jbHVzdGVyX2lkIHx8ICcnLFxuICAgICAgICAgIHBhcnRpdGlvbkNvdW50OiByZXNwb25zZS5wYXJ0aXRpb25fY291bnQgfHwgMCxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IExvZ2luRmFpbGVkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCAnTG9naW4gZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jdHguc2Vzc2lvbnMuaXNMb2dnZWRJbigpKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICAgIGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICAgIHRoaXMuY3R4LmNsaWVudHMuc2Vzc2lvblNlcnZpY2UsXG4gICAgICAgICdMb2dvdXQnLFxuICAgICAgICB7fSxcbiAgICAgICAgbWV0YWRhdGFcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGxvZ291dCBlcnJvcnNcbiAgICB9XG5cbiAgICB0aGlzLmN0eC50eE1hbmFnZXIuY2xlYXJBbGwoKTtcbiAgICB0aGlzLmN0eC5zZXNzaW9ucy5sb2dvdXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgY29ubmVjdGlvbiBhbmQgcmV0dXJuIHRoZSBsYXRlbmN5IGluIG5hbm9zZWNvbmRzLlxuICAgKi9cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG5cbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuc2Vzc2lvblNlcnZpY2UsXG4gICAgICAnUGluZycsXG4gICAgICB7fSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHRoaXMuY3R4LnVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgcmV0dXJuIHBhcnNlSW50KHJlc3BvbnNlLmxhdGVuY3lfbnMgfHwgJzAnLCAxMCk7XG4gIH1cbn1cbiJdfQ==