UNPKG

@ultipa-graph/ultipa-driver

Version:

NodeJS SDK for Ultipa GQL

90 lines 10.3 kB
"use strict"; /** * Transaction management for GQLDB Node.js driver. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TransactionManager = void 0; const errors_1 = require("./errors"); /** Manages transactions for the client */ class TransactionManager { transactions = new Map(); /** Create a new transaction */ begin(txId, sessionId, graphName, readOnly, timeout, clientSessionId = '') { const tx = { id: txId, sessionId, graphName, readOnly, createdAt: Date.now(), timeout, committed: false, rolledBack: false, clientSessionId, }; this.transactions.set(txId, tx); return tx; } /** Mark a transaction as committed */ commit(txId) { const tx = this.transactions.get(txId); if (!tx) { throw new errors_1.TransactionNotFoundError(); } tx.committed = true; this.transactions.delete(txId); } /** Mark a transaction as rolled back */ rollback(txId) { const tx = this.transactions.get(txId); if (!tx) { throw new errors_1.TransactionNotFoundError(); } tx.rolledBack = true; this.transactions.delete(txId); } /** Get a transaction by ID */ get(txId) { return this.transactions.get(txId); } /** Get all active transactions */ getActive() { return Array.from(this.transactions.values()); } /** Get all active transactions for a session */ getActiveForSession(sessionId) { return this.getActive().filter(tx => tx.sessionId === sessionId); } /** Check if there are any active transactions */ hasActive() { return this.transactions.size > 0; } /** Get the number of active transactions */ count() { return this.transactions.size; } /** Clear all transactions */ clearAll() { this.transactions.clear(); } /** Check if a transaction is active */ isActive(txId) { const tx = this.transactions.get(txId); return tx !== undefined && !tx.committed && !tx.rolledBack; } /** Check if a transaction has expired */ isExpired(txId) { const tx = this.transactions.get(txId); if (!tx || tx.timeout === 0) return false; return Date.now() - tx.createdAt > tx.timeout; } /** Get transaction age in milliseconds */ age(txId) { const tx = this.transactions.get(txId); if (!tx) return 0; return Date.now() - tx.createdAt; } } exports.TransactionManager = TransactionManager; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxxQ0FBb0Q7QUFxQnBELDBDQUEwQztBQUMxQyxNQUFhLGtCQUFrQjtJQUNyQixZQUFZLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0QsK0JBQStCO0lBQy9CLEtBQUssQ0FDSCxJQUFZLEVBQ1osU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsUUFBaUIsRUFDakIsT0FBZSxFQUNmLGtCQUEwQixFQUFFO1FBRTVCLE1BQU0sRUFBRSxHQUFnQjtZQUN0QixFQUFFLEVBQUUsSUFBSTtZQUNSLFNBQVM7WUFDVCxTQUFTO1lBQ1QsUUFBUTtZQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE9BQU87WUFDUCxTQUFTLEVBQUUsS0FBSztZQUNoQixVQUFVLEVBQUUsS0FBSztZQUNqQixlQUFlO1NBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBQyxJQUFZO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBSSxpQ0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE1BQU0sSUFBSSxpQ0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFNBQVM7UUFDUCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsbUJBQW1CLENBQUMsU0FBaUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxRQUFRLENBQUMsSUFBWTtRQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLEVBQUUsS0FBSyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUM3RCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFNBQVMsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsR0FBRyxDQUFDLElBQVk7UUFDZCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBaEdELGdEQWdHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNhY3Rpb24gbWFuYWdlbWVudCBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXG4gKi9cblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vKiogUmVwcmVzZW50cyBhbiBhY3RpdmUgZGF0YWJhc2UgdHJhbnNhY3Rpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb24ge1xuICBpZDogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgZ3JhcGhOYW1lOiBzdHJpbmc7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyOyAvLyBpbiBtaWxsaXNlY29uZHNcbiAgY29tbWl0dGVkOiBib29sZWFuO1xuICByb2xsZWRCYWNrOiBib29sZWFuO1xuICAvKipcbiAgICogU3RhYmxlIHBlci1jbGllbnQgbG9naWNhbCBzZXNzaW9uIGlkIHN1cmZhY2VkIHVuZGVyIHRoZVxuICAgKiB0cmFuc2FjdGlvbi1icmFuY2ggbW9kZWwuIERpc3RpbmN0IGZyb20gYHNlc3Npb25JZDogbnVtYmVyYCAodGhlXG4gICAqIGxlZ2FjeSB1aW50NjQgZnJvbSBMb2dpbikuIEFsd2F5cyBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlci4gU2VlXG4gICAqIFRSQU5TQUNUSU9OU19EUklWRVJfR1VJREUubWQgwqcyLjDigJMyLjEuXG4gICAqL1xuICBjbGllbnRTZXNzaW9uSWQ6IHN0cmluZztcbn1cblxuLyoqIE1hbmFnZXMgdHJhbnNhY3Rpb25zIGZvciB0aGUgY2xpZW50ICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSB0cmFuc2FjdGlvbnM6IE1hcDxudW1iZXIsIFRyYW5zYWN0aW9uPiA9IG5ldyBNYXAoKTtcblxuICAvKiogQ3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uICovXG4gIGJlZ2luKFxuICAgIHR4SWQ6IG51bWJlcixcbiAgICBzZXNzaW9uSWQ6IG51bWJlcixcbiAgICBncmFwaE5hbWU6IHN0cmluZyxcbiAgICByZWFkT25seTogYm9vbGVhbixcbiAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSAnJ1xuICApOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHg6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgaWQ6IHR4SWQsXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBncmFwaE5hbWUsXG4gICAgICByZWFkT25seSxcbiAgICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBjb21taXR0ZWQ6IGZhbHNlLFxuICAgICAgcm9sbGVkQmFjazogZmFsc2UsXG4gICAgICBjbGllbnRTZXNzaW9uSWQsXG4gICAgfTtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucy5zZXQodHhJZCwgdHgpO1xuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBNYXJrIGEgdHJhbnNhY3Rpb24gYXMgY29tbWl0dGVkICovXG4gIGNvbW1pdCh0eElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb25zLmdldCh0eElkKTtcbiAgICBpZiAoIXR4KSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKCk7XG4gICAgfVxuICAgIHR4LmNvbW1pdHRlZCA9IHRydWU7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMuZGVsZXRlKHR4SWQpO1xuICB9XG5cbiAgLyoqIE1hcmsgYSB0cmFuc2FjdGlvbiBhcyByb2xsZWQgYmFjayAqL1xuICByb2xsYmFjayh0eElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb25zLmdldCh0eElkKTtcbiAgICBpZiAoIXR4KSB7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25Ob3RGb3VuZEVycm9yKCk7XG4gICAgfVxuICAgIHR4LnJvbGxlZEJhY2sgPSB0cnVlO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zLmRlbGV0ZSh0eElkKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSB0cmFuc2FjdGlvbiBieSBJRCAqL1xuICBnZXQodHhJZDogbnVtYmVyKTogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9ucy5nZXQodHhJZCk7XG4gIH1cblxuICAvKiogR2V0IGFsbCBhY3RpdmUgdHJhbnNhY3Rpb25zICovXG4gIGdldEFjdGl2ZSgpOiBUcmFuc2FjdGlvbltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRyYW5zYWN0aW9ucy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKiogR2V0IGFsbCBhY3RpdmUgdHJhbnNhY3Rpb25zIGZvciBhIHNlc3Npb24gKi9cbiAgZ2V0QWN0aXZlRm9yU2Vzc2lvbihzZXNzaW9uSWQ6IG51bWJlcik6IFRyYW5zYWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZSgpLmZpbHRlcih0eCA9PiB0eC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBhY3RpdmUgdHJhbnNhY3Rpb25zICovXG4gIGhhc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbnMuc2l6ZSA+IDA7XG4gIH1cblxuICAvKiogR2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIHRyYW5zYWN0aW9ucyAqL1xuICBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCB0cmFuc2FjdGlvbnMgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBhIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZSAqL1xuICBpc0FjdGl2ZSh0eElkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb25zLmdldCh0eElkKTtcbiAgICByZXR1cm4gdHggIT09IHVuZGVmaW5lZCAmJiAhdHguY29tbWl0dGVkICYmICF0eC5yb2xsZWRCYWNrO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIGEgdHJhbnNhY3Rpb24gaGFzIGV4cGlyZWQgKi9cbiAgaXNFeHBpcmVkKHR4SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHR4ID0gdGhpcy50cmFuc2FjdGlvbnMuZ2V0KHR4SWQpO1xuICAgIGlmICghdHggfHwgdHgudGltZW91dCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdHguY3JlYXRlZEF0ID4gdHgudGltZW91dDtcbiAgfVxuXG4gIC8qKiBHZXQgdHJhbnNhY3Rpb24gYWdlIGluIG1pbGxpc2Vjb25kcyAqL1xuICBhZ2UodHhJZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb25zLmdldCh0eElkKTtcbiAgICBpZiAoIXR4KSByZXR1cm4gMDtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHR4LmNyZWF0ZWRBdDtcbiAgfVxufVxuIl19