@esengine/transaction 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/TransactionContext.d.ts +79 -0
- package/dist/core/TransactionContext.d.ts.map +1 -0
- package/dist/core/TransactionManager.d.ts +104 -0
- package/dist/core/TransactionManager.d.ts.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/types.d.ts +393 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/distributed/SagaOrchestrator.d.ts +173 -0
- package/dist/distributed/SagaOrchestrator.d.ts.map +1 -0
- package/dist/distributed/index.d.ts +6 -0
- package/dist/distributed/index.d.ts.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1621 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/RoomTransactionMixin.d.ts +108 -0
- package/dist/integration/RoomTransactionMixin.d.ts.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/operations/BaseOperation.d.ts +43 -0
- package/dist/operations/BaseOperation.d.ts.map +1 -0
- package/dist/operations/CurrencyOperation.d.ts +122 -0
- package/dist/operations/CurrencyOperation.d.ts.map +1 -0
- package/dist/operations/InventoryOperation.d.ts +152 -0
- package/dist/operations/InventoryOperation.d.ts.map +1 -0
- package/dist/operations/TradeOperation.d.ts +155 -0
- package/dist/operations/TradeOperation.d.ts.map +1 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/storage/MemoryStorage.d.ts +63 -0
- package/dist/storage/MemoryStorage.d.ts.map +1 -0
- package/dist/storage/MongoStorage.d.ts +118 -0
- package/dist/storage/MongoStorage.d.ts.map +1 -0
- package/dist/storage/RedisStorage.d.ts +125 -0
- package/dist/storage/RedisStorage.d.ts.map +1 -0
- package/dist/storage/index.d.ts +8 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/tokens.d.ts +17 -0
- package/dist/tokens.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 事务上下文实现
|
|
3
|
+
* @en Transaction context implementation
|
|
4
|
+
*/
|
|
5
|
+
import type { ITransactionContext, ITransactionOperation, ITransactionStorage, TransactionState, TransactionResult, TransactionOptions } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* @zh 事务上下文
|
|
8
|
+
* @en Transaction context
|
|
9
|
+
*
|
|
10
|
+
* @zh 封装事务的状态、操作和执行逻辑
|
|
11
|
+
* @en Encapsulates transaction state, operations, and execution logic
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const ctx = new TransactionContext({ timeout: 5000 })
|
|
16
|
+
* ctx.addOperation(new DeductCurrency({ playerId: '1', amount: 100 }))
|
|
17
|
+
* ctx.addOperation(new AddItem({ playerId: '1', itemId: 'sword' }))
|
|
18
|
+
* const result = await ctx.execute()
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class TransactionContext implements ITransactionContext {
|
|
22
|
+
private _id;
|
|
23
|
+
private _state;
|
|
24
|
+
private _timeout;
|
|
25
|
+
private _operations;
|
|
26
|
+
private _storage;
|
|
27
|
+
private _metadata;
|
|
28
|
+
private _contextData;
|
|
29
|
+
private _startTime;
|
|
30
|
+
private _distributed;
|
|
31
|
+
constructor(options?: TransactionOptions & {
|
|
32
|
+
storage?: ITransactionStorage;
|
|
33
|
+
});
|
|
34
|
+
get id(): string;
|
|
35
|
+
get state(): TransactionState;
|
|
36
|
+
get timeout(): number;
|
|
37
|
+
get operations(): ReadonlyArray<ITransactionOperation>;
|
|
38
|
+
get storage(): ITransactionStorage | null;
|
|
39
|
+
get metadata(): Record<string, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* @zh 添加操作
|
|
42
|
+
* @en Add operation
|
|
43
|
+
*/
|
|
44
|
+
addOperation<T extends ITransactionOperation>(operation: T): this;
|
|
45
|
+
/**
|
|
46
|
+
* @zh 执行事务
|
|
47
|
+
* @en Execute transaction
|
|
48
|
+
*/
|
|
49
|
+
execute<T = unknown>(): Promise<TransactionResult<T>>;
|
|
50
|
+
/**
|
|
51
|
+
* @zh 手动回滚事务
|
|
52
|
+
* @en Manually rollback transaction
|
|
53
|
+
*/
|
|
54
|
+
rollback(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* @zh 获取上下文数据
|
|
57
|
+
* @en Get context data
|
|
58
|
+
*/
|
|
59
|
+
get<T>(key: string): T | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* @zh 设置上下文数据
|
|
62
|
+
* @en Set context data
|
|
63
|
+
*/
|
|
64
|
+
set<T>(key: string, value: T): void;
|
|
65
|
+
private _isTimedOut;
|
|
66
|
+
private _compensate;
|
|
67
|
+
private _saveLog;
|
|
68
|
+
private _updateTransactionState;
|
|
69
|
+
private _updateOperationLog;
|
|
70
|
+
private _collectResultData;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @zh 创建事务上下文
|
|
74
|
+
* @en Create transaction context
|
|
75
|
+
*/
|
|
76
|
+
export declare function createTransactionContext(options?: TransactionOptions & {
|
|
77
|
+
storage?: ITransactionStorage;
|
|
78
|
+
}): ITransactionContext;
|
|
79
|
+
//# sourceMappingURL=TransactionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionContext.d.ts","sourceRoot":"","sources":["../../src/core/TransactionContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAIrB,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;;;;GAcG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE,kBAAkB,GAAG;QAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAO;IAYhF,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,KAAK,IAAI,gBAAgB,CAE5B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,UAAU,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAErD;IAED,IAAI,OAAO,IAAI,mBAAmB,GAAG,IAAI,CAExC;IAED,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtC;IAMD;;;OAGG;IACH,YAAY,CAAC,CAAC,SAAS,qBAAqB,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI;IAQjE;;;OAGG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAoE3D;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAQnC,OAAO,CAAC,WAAW;YAIL,WAAW;YAiBX,QAAQ;YAqBR,uBAAuB;YAOvB,mBAAmB;IAUjC,OAAO,CAAC,kBAAkB;CAS7B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,GAAE,kBAAkB,GAAG;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAO,GACrE,mBAAmB,CAErB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 事务管理器
|
|
3
|
+
* @en Transaction manager
|
|
4
|
+
*/
|
|
5
|
+
import type { ITransactionContext, ITransactionStorage, TransactionManagerConfig, TransactionOptions, TransactionResult } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* @zh 事务管理器
|
|
8
|
+
* @en Transaction manager
|
|
9
|
+
*
|
|
10
|
+
* @zh 管理事务的创建、执行和恢复
|
|
11
|
+
* @en Manages transaction creation, execution, and recovery
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const manager = new TransactionManager({
|
|
16
|
+
* storage: new RedisStorage({ url: 'redis://localhost:6379' }),
|
|
17
|
+
* defaultTimeout: 10000,
|
|
18
|
+
* })
|
|
19
|
+
*
|
|
20
|
+
* const tx = manager.begin({ timeout: 5000 })
|
|
21
|
+
* tx.addOperation(new DeductCurrency({ ... }))
|
|
22
|
+
* tx.addOperation(new AddItem({ ... }))
|
|
23
|
+
*
|
|
24
|
+
* const result = await tx.execute()
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class TransactionManager {
|
|
28
|
+
private _storage;
|
|
29
|
+
private _defaultTimeout;
|
|
30
|
+
private _serverId;
|
|
31
|
+
private _autoRecover;
|
|
32
|
+
private _activeTransactions;
|
|
33
|
+
constructor(config?: TransactionManagerConfig);
|
|
34
|
+
/**
|
|
35
|
+
* @zh 服务器 ID
|
|
36
|
+
* @en Server ID
|
|
37
|
+
*/
|
|
38
|
+
get serverId(): string;
|
|
39
|
+
/**
|
|
40
|
+
* @zh 存储实例
|
|
41
|
+
* @en Storage instance
|
|
42
|
+
*/
|
|
43
|
+
get storage(): ITransactionStorage | null;
|
|
44
|
+
/**
|
|
45
|
+
* @zh 活跃事务数量
|
|
46
|
+
* @en Active transaction count
|
|
47
|
+
*/
|
|
48
|
+
get activeCount(): number;
|
|
49
|
+
/**
|
|
50
|
+
* @zh 开始新事务
|
|
51
|
+
* @en Begin new transaction
|
|
52
|
+
*
|
|
53
|
+
* @param options - @zh 事务选项 @en Transaction options
|
|
54
|
+
* @returns @zh 事务上下文 @en Transaction context
|
|
55
|
+
*/
|
|
56
|
+
begin(options?: TransactionOptions): ITransactionContext;
|
|
57
|
+
/**
|
|
58
|
+
* @zh 执行事务(便捷方法)
|
|
59
|
+
* @en Execute transaction (convenience method)
|
|
60
|
+
*
|
|
61
|
+
* @param builder - @zh 事务构建函数 @en Transaction builder function
|
|
62
|
+
* @param options - @zh 事务选项 @en Transaction options
|
|
63
|
+
* @returns @zh 事务结果 @en Transaction result
|
|
64
|
+
*/
|
|
65
|
+
run<T = unknown>(builder: (ctx: ITransactionContext) => void | Promise<void>, options?: TransactionOptions): Promise<TransactionResult<T>>;
|
|
66
|
+
/**
|
|
67
|
+
* @zh 获取活跃事务
|
|
68
|
+
* @en Get active transaction
|
|
69
|
+
*/
|
|
70
|
+
getTransaction(id: string): ITransactionContext | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* @zh 恢复未完成的事务
|
|
73
|
+
* @en Recover pending transactions
|
|
74
|
+
*/
|
|
75
|
+
recover(): Promise<number>;
|
|
76
|
+
/**
|
|
77
|
+
* @zh 获取分布式锁
|
|
78
|
+
* @en Acquire distributed lock
|
|
79
|
+
*/
|
|
80
|
+
acquireLock(key: string, ttl?: number): Promise<string | null>;
|
|
81
|
+
/**
|
|
82
|
+
* @zh 释放分布式锁
|
|
83
|
+
* @en Release distributed lock
|
|
84
|
+
*/
|
|
85
|
+
releaseLock(key: string, token: string): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* @zh 使用分布式锁执行
|
|
88
|
+
* @en Execute with distributed lock
|
|
89
|
+
*/
|
|
90
|
+
withLock<T>(key: string, fn: () => Promise<T>, ttl?: number): Promise<T>;
|
|
91
|
+
/**
|
|
92
|
+
* @zh 清理已完成的事务日志
|
|
93
|
+
* @en Clean up completed transaction logs
|
|
94
|
+
*/
|
|
95
|
+
cleanup(beforeTimestamp?: number): Promise<number>;
|
|
96
|
+
private _generateServerId;
|
|
97
|
+
private _recoverTransaction;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @zh 创建事务管理器
|
|
101
|
+
* @en Create transaction manager
|
|
102
|
+
*/
|
|
103
|
+
export declare function createTransactionManager(config?: TransactionManagerConfig): TransactionManager;
|
|
104
|
+
//# sourceMappingURL=TransactionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionManager.d.ts","sourceRoot":"","sources":["../../src/core/TransactionManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAElB,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,mBAAmB,CAA+C;gBAE9D,MAAM,GAAE,wBAA6B;IAWjD;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,mBAAmB,GAAG,IAAI,CAExC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAMD;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,GAAE,kBAAuB,GAAG,mBAAmB;IAgB5D;;;;;;;OAOG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACjB,OAAO,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC3D,OAAO,GAAE,kBAAuB,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAYhC;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI3D;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBhC;;;OAGG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3E;;;OAGG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D;;;OAGG;IACG,QAAQ,CAAC,CAAC,EACZ,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,GAAG,GAAE,MAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAab;;;OAGG;IACG,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBxD,OAAO,CAAC,iBAAiB;YAIX,mBAAmB;CAcpC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,GAAE,wBAA6B,GACtC,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 核心模块导出
|
|
3
|
+
* @en Core module exports
|
|
4
|
+
*/
|
|
5
|
+
export type { TransactionState, OperationResult, TransactionResult, OperationLog, TransactionLog, TransactionOptions, TransactionManagerConfig, ITransactionStorage, ITransactionOperation, ITransactionContext } from './types.js';
|
|
6
|
+
export { TransactionContext, createTransactionContext } from './TransactionContext.js';
|
|
7
|
+
export { TransactionManager, createTransactionManager } from './TransactionManager.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACR,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 事务系统核心类型定义
|
|
3
|
+
* @en Transaction system core type definitions
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @zh 事务状态
|
|
7
|
+
* @en Transaction state
|
|
8
|
+
*/
|
|
9
|
+
export type TransactionState = 'pending' | 'executing' | 'committed' | 'rolledback' | 'failed';
|
|
10
|
+
/**
|
|
11
|
+
* @zh 操作结果
|
|
12
|
+
* @en Operation result
|
|
13
|
+
*/
|
|
14
|
+
export interface OperationResult<T = unknown> {
|
|
15
|
+
/**
|
|
16
|
+
* @zh 是否成功
|
|
17
|
+
* @en Whether succeeded
|
|
18
|
+
*/
|
|
19
|
+
success: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* @zh 返回数据
|
|
22
|
+
* @en Return data
|
|
23
|
+
*/
|
|
24
|
+
data?: T;
|
|
25
|
+
/**
|
|
26
|
+
* @zh 错误信息
|
|
27
|
+
* @en Error message
|
|
28
|
+
*/
|
|
29
|
+
error?: string;
|
|
30
|
+
/**
|
|
31
|
+
* @zh 错误代码
|
|
32
|
+
* @en Error code
|
|
33
|
+
*/
|
|
34
|
+
errorCode?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @zh 事务结果
|
|
38
|
+
* @en Transaction result
|
|
39
|
+
*/
|
|
40
|
+
export interface TransactionResult<T = unknown> {
|
|
41
|
+
/**
|
|
42
|
+
* @zh 是否成功
|
|
43
|
+
* @en Whether succeeded
|
|
44
|
+
*/
|
|
45
|
+
success: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* @zh 事务 ID
|
|
48
|
+
* @en Transaction ID
|
|
49
|
+
*/
|
|
50
|
+
transactionId: string;
|
|
51
|
+
/**
|
|
52
|
+
* @zh 操作结果列表
|
|
53
|
+
* @en Operation results
|
|
54
|
+
*/
|
|
55
|
+
results: OperationResult[];
|
|
56
|
+
/**
|
|
57
|
+
* @zh 最终数据
|
|
58
|
+
* @en Final data
|
|
59
|
+
*/
|
|
60
|
+
data?: T;
|
|
61
|
+
/**
|
|
62
|
+
* @zh 错误信息
|
|
63
|
+
* @en Error message
|
|
64
|
+
*/
|
|
65
|
+
error?: string;
|
|
66
|
+
/**
|
|
67
|
+
* @zh 执行时间(毫秒)
|
|
68
|
+
* @en Execution time in milliseconds
|
|
69
|
+
*/
|
|
70
|
+
duration: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @zh 操作日志
|
|
74
|
+
* @en Operation log
|
|
75
|
+
*/
|
|
76
|
+
export interface OperationLog {
|
|
77
|
+
/**
|
|
78
|
+
* @zh 操作名称
|
|
79
|
+
* @en Operation name
|
|
80
|
+
*/
|
|
81
|
+
name: string;
|
|
82
|
+
/**
|
|
83
|
+
* @zh 操作数据
|
|
84
|
+
* @en Operation data
|
|
85
|
+
*/
|
|
86
|
+
data: unknown;
|
|
87
|
+
/**
|
|
88
|
+
* @zh 操作状态
|
|
89
|
+
* @en Operation state
|
|
90
|
+
*/
|
|
91
|
+
state: 'pending' | 'executed' | 'compensated' | 'failed';
|
|
92
|
+
/**
|
|
93
|
+
* @zh 执行时间
|
|
94
|
+
* @en Execution timestamp
|
|
95
|
+
*/
|
|
96
|
+
executedAt?: number;
|
|
97
|
+
/**
|
|
98
|
+
* @zh 补偿时间
|
|
99
|
+
* @en Compensation timestamp
|
|
100
|
+
*/
|
|
101
|
+
compensatedAt?: number;
|
|
102
|
+
/**
|
|
103
|
+
* @zh 错误信息
|
|
104
|
+
* @en Error message
|
|
105
|
+
*/
|
|
106
|
+
error?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @zh 事务日志
|
|
110
|
+
* @en Transaction log
|
|
111
|
+
*/
|
|
112
|
+
export interface TransactionLog {
|
|
113
|
+
/**
|
|
114
|
+
* @zh 事务 ID
|
|
115
|
+
* @en Transaction ID
|
|
116
|
+
*/
|
|
117
|
+
id: string;
|
|
118
|
+
/**
|
|
119
|
+
* @zh 事务状态
|
|
120
|
+
* @en Transaction state
|
|
121
|
+
*/
|
|
122
|
+
state: TransactionState;
|
|
123
|
+
/**
|
|
124
|
+
* @zh 创建时间
|
|
125
|
+
* @en Creation timestamp
|
|
126
|
+
*/
|
|
127
|
+
createdAt: number;
|
|
128
|
+
/**
|
|
129
|
+
* @zh 更新时间
|
|
130
|
+
* @en Update timestamp
|
|
131
|
+
*/
|
|
132
|
+
updatedAt: number;
|
|
133
|
+
/**
|
|
134
|
+
* @zh 超时时间(毫秒)
|
|
135
|
+
* @en Timeout in milliseconds
|
|
136
|
+
*/
|
|
137
|
+
timeout: number;
|
|
138
|
+
/**
|
|
139
|
+
* @zh 操作日志列表
|
|
140
|
+
* @en Operation logs
|
|
141
|
+
*/
|
|
142
|
+
operations: OperationLog[];
|
|
143
|
+
/**
|
|
144
|
+
* @zh 元数据
|
|
145
|
+
* @en Metadata
|
|
146
|
+
*/
|
|
147
|
+
metadata?: Record<string, unknown>;
|
|
148
|
+
/**
|
|
149
|
+
* @zh 是否分布式事务
|
|
150
|
+
* @en Whether distributed transaction
|
|
151
|
+
*/
|
|
152
|
+
distributed?: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* @zh 参与的服务器列表
|
|
155
|
+
* @en Participating servers
|
|
156
|
+
*/
|
|
157
|
+
participants?: string[];
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* @zh 事务选项
|
|
161
|
+
* @en Transaction options
|
|
162
|
+
*/
|
|
163
|
+
export interface TransactionOptions {
|
|
164
|
+
/**
|
|
165
|
+
* @zh 超时时间(毫秒),默认 30000
|
|
166
|
+
* @en Timeout in milliseconds, default 30000
|
|
167
|
+
*/
|
|
168
|
+
timeout?: number;
|
|
169
|
+
/**
|
|
170
|
+
* @zh 是否分布式事务
|
|
171
|
+
* @en Whether distributed transaction
|
|
172
|
+
*/
|
|
173
|
+
distributed?: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* @zh 元数据
|
|
176
|
+
* @en Metadata
|
|
177
|
+
*/
|
|
178
|
+
metadata?: Record<string, unknown>;
|
|
179
|
+
/**
|
|
180
|
+
* @zh 重试次数,默认 0
|
|
181
|
+
* @en Retry count, default 0
|
|
182
|
+
*/
|
|
183
|
+
retryCount?: number;
|
|
184
|
+
/**
|
|
185
|
+
* @zh 重试间隔(毫秒),默认 1000
|
|
186
|
+
* @en Retry interval in milliseconds, default 1000
|
|
187
|
+
*/
|
|
188
|
+
retryInterval?: number;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @zh 事务管理器配置
|
|
192
|
+
* @en Transaction manager configuration
|
|
193
|
+
*/
|
|
194
|
+
export interface TransactionManagerConfig {
|
|
195
|
+
/**
|
|
196
|
+
* @zh 存储实例
|
|
197
|
+
* @en Storage instance
|
|
198
|
+
*/
|
|
199
|
+
storage?: ITransactionStorage;
|
|
200
|
+
/**
|
|
201
|
+
* @zh 默认超时时间(毫秒)
|
|
202
|
+
* @en Default timeout in milliseconds
|
|
203
|
+
*/
|
|
204
|
+
defaultTimeout?: number;
|
|
205
|
+
/**
|
|
206
|
+
* @zh 服务器 ID(分布式用)
|
|
207
|
+
* @en Server ID for distributed transactions
|
|
208
|
+
*/
|
|
209
|
+
serverId?: string;
|
|
210
|
+
/**
|
|
211
|
+
* @zh 是否自动恢复未完成事务
|
|
212
|
+
* @en Whether to auto-recover pending transactions
|
|
213
|
+
*/
|
|
214
|
+
autoRecover?: boolean;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* @zh 事务存储接口
|
|
218
|
+
* @en Transaction storage interface
|
|
219
|
+
*/
|
|
220
|
+
export interface ITransactionStorage {
|
|
221
|
+
/**
|
|
222
|
+
* @zh 关闭存储连接
|
|
223
|
+
* @en Close storage connection
|
|
224
|
+
*
|
|
225
|
+
* @zh 释放所有资源,关闭数据库连接
|
|
226
|
+
* @en Release all resources, close database connections
|
|
227
|
+
*/
|
|
228
|
+
close?(): Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* @zh 获取分布式锁
|
|
231
|
+
* @en Acquire distributed lock
|
|
232
|
+
*
|
|
233
|
+
* @param key - @zh 锁的键 @en Lock key
|
|
234
|
+
* @param ttl - @zh 锁的生存时间(毫秒) @en Lock TTL in milliseconds
|
|
235
|
+
* @returns @zh 锁令牌,获取失败返回 null @en Lock token, null if failed
|
|
236
|
+
*/
|
|
237
|
+
acquireLock(key: string, ttl: number): Promise<string | null>;
|
|
238
|
+
/**
|
|
239
|
+
* @zh 释放分布式锁
|
|
240
|
+
* @en Release distributed lock
|
|
241
|
+
*
|
|
242
|
+
* @param key - @zh 锁的键 @en Lock key
|
|
243
|
+
* @param token - @zh 锁令牌 @en Lock token
|
|
244
|
+
* @returns @zh 是否成功释放 @en Whether released successfully
|
|
245
|
+
*/
|
|
246
|
+
releaseLock(key: string, token: string): Promise<boolean>;
|
|
247
|
+
/**
|
|
248
|
+
* @zh 保存事务日志
|
|
249
|
+
* @en Save transaction log
|
|
250
|
+
*/
|
|
251
|
+
saveTransaction(tx: TransactionLog): Promise<void>;
|
|
252
|
+
/**
|
|
253
|
+
* @zh 获取事务日志
|
|
254
|
+
* @en Get transaction log
|
|
255
|
+
*/
|
|
256
|
+
getTransaction(id: string): Promise<TransactionLog | null>;
|
|
257
|
+
/**
|
|
258
|
+
* @zh 更新事务状态
|
|
259
|
+
* @en Update transaction state
|
|
260
|
+
*/
|
|
261
|
+
updateTransactionState(id: string, state: TransactionState): Promise<void>;
|
|
262
|
+
/**
|
|
263
|
+
* @zh 更新操作状态
|
|
264
|
+
* @en Update operation state
|
|
265
|
+
*/
|
|
266
|
+
updateOperationState(transactionId: string, operationIndex: number, state: OperationLog['state'], error?: string): Promise<void>;
|
|
267
|
+
/**
|
|
268
|
+
* @zh 获取待恢复的事务列表
|
|
269
|
+
* @en Get pending transactions for recovery
|
|
270
|
+
*/
|
|
271
|
+
getPendingTransactions(serverId?: string): Promise<TransactionLog[]>;
|
|
272
|
+
/**
|
|
273
|
+
* @zh 删除事务日志
|
|
274
|
+
* @en Delete transaction log
|
|
275
|
+
*/
|
|
276
|
+
deleteTransaction(id: string): Promise<void>;
|
|
277
|
+
/**
|
|
278
|
+
* @zh 获取数据
|
|
279
|
+
* @en Get data
|
|
280
|
+
*/
|
|
281
|
+
get<T>(key: string): Promise<T | null>;
|
|
282
|
+
/**
|
|
283
|
+
* @zh 设置数据
|
|
284
|
+
* @en Set data
|
|
285
|
+
*/
|
|
286
|
+
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
287
|
+
/**
|
|
288
|
+
* @zh 删除数据
|
|
289
|
+
* @en Delete data
|
|
290
|
+
*/
|
|
291
|
+
delete(key: string): Promise<boolean>;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* @zh 事务操作接口
|
|
295
|
+
* @en Transaction operation interface
|
|
296
|
+
*/
|
|
297
|
+
export interface ITransactionOperation<TData = unknown, TResult = unknown> {
|
|
298
|
+
/**
|
|
299
|
+
* @zh 操作名称
|
|
300
|
+
* @en Operation name
|
|
301
|
+
*/
|
|
302
|
+
readonly name: string;
|
|
303
|
+
/**
|
|
304
|
+
* @zh 操作数据
|
|
305
|
+
* @en Operation data
|
|
306
|
+
*/
|
|
307
|
+
readonly data: TData;
|
|
308
|
+
/**
|
|
309
|
+
* @zh 验证前置条件
|
|
310
|
+
* @en Validate preconditions
|
|
311
|
+
*
|
|
312
|
+
* @param ctx - @zh 事务上下文 @en Transaction context
|
|
313
|
+
* @returns @zh 是否验证通过 @en Whether validation passed
|
|
314
|
+
*/
|
|
315
|
+
validate(ctx: ITransactionContext): Promise<boolean>;
|
|
316
|
+
/**
|
|
317
|
+
* @zh 执行操作
|
|
318
|
+
* @en Execute operation
|
|
319
|
+
*
|
|
320
|
+
* @param ctx - @zh 事务上下文 @en Transaction context
|
|
321
|
+
* @returns @zh 操作结果 @en Operation result
|
|
322
|
+
*/
|
|
323
|
+
execute(ctx: ITransactionContext): Promise<OperationResult<TResult>>;
|
|
324
|
+
/**
|
|
325
|
+
* @zh 补偿操作(回滚)
|
|
326
|
+
* @en Compensate operation (rollback)
|
|
327
|
+
*
|
|
328
|
+
* @param ctx - @zh 事务上下文 @en Transaction context
|
|
329
|
+
*/
|
|
330
|
+
compensate(ctx: ITransactionContext): Promise<void>;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* @zh 事务上下文接口
|
|
334
|
+
* @en Transaction context interface
|
|
335
|
+
*/
|
|
336
|
+
export interface ITransactionContext {
|
|
337
|
+
/**
|
|
338
|
+
* @zh 事务 ID
|
|
339
|
+
* @en Transaction ID
|
|
340
|
+
*/
|
|
341
|
+
readonly id: string;
|
|
342
|
+
/**
|
|
343
|
+
* @zh 事务状态
|
|
344
|
+
* @en Transaction state
|
|
345
|
+
*/
|
|
346
|
+
readonly state: TransactionState;
|
|
347
|
+
/**
|
|
348
|
+
* @zh 超时时间(毫秒)
|
|
349
|
+
* @en Timeout in milliseconds
|
|
350
|
+
*/
|
|
351
|
+
readonly timeout: number;
|
|
352
|
+
/**
|
|
353
|
+
* @zh 操作列表
|
|
354
|
+
* @en Operations
|
|
355
|
+
*/
|
|
356
|
+
readonly operations: ReadonlyArray<ITransactionOperation>;
|
|
357
|
+
/**
|
|
358
|
+
* @zh 存储实例
|
|
359
|
+
* @en Storage instance
|
|
360
|
+
*/
|
|
361
|
+
readonly storage: ITransactionStorage | null;
|
|
362
|
+
/**
|
|
363
|
+
* @zh 元数据
|
|
364
|
+
* @en Metadata
|
|
365
|
+
*/
|
|
366
|
+
readonly metadata: Record<string, unknown>;
|
|
367
|
+
/**
|
|
368
|
+
* @zh 添加操作
|
|
369
|
+
* @en Add operation
|
|
370
|
+
*/
|
|
371
|
+
addOperation<T extends ITransactionOperation>(operation: T): this;
|
|
372
|
+
/**
|
|
373
|
+
* @zh 执行事务
|
|
374
|
+
* @en Execute transaction
|
|
375
|
+
*/
|
|
376
|
+
execute<T = unknown>(): Promise<TransactionResult<T>>;
|
|
377
|
+
/**
|
|
378
|
+
* @zh 回滚事务
|
|
379
|
+
* @en Rollback transaction
|
|
380
|
+
*/
|
|
381
|
+
rollback(): Promise<void>;
|
|
382
|
+
/**
|
|
383
|
+
* @zh 获取上下文数据
|
|
384
|
+
* @en Get context data
|
|
385
|
+
*/
|
|
386
|
+
get<T>(key: string): T | undefined;
|
|
387
|
+
/**
|
|
388
|
+
* @zh 设置上下文数据
|
|
389
|
+
* @en Set context data
|
|
390
|
+
*/
|
|
391
|
+
set<T>(key: string, value: T): void;
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACtB,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,QAAQ,CAAA;AAMd;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IACxC;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,CAAA;IAER;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,OAAO,EAAE,eAAe,EAAE,CAAA;IAE1B;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,CAAA;IAER;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;CACnB;AAMD;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAA;IAEb;;;OAGG;IACH,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAA;IAExD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAA;IAEV;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAA;IAEvB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,UAAU,EAAE,YAAY,EAAE,CAAA;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAElC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAMD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAElC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAE7B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB;AAMD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEvB;;;;;;;OAOG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAE7D;;;;;;;OAOG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEzD;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAElD;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAE1D;;;OAGG;IACH,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1E;;;OAGG;IACH,oBAAoB,CAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,KAAK,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAEpE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5C;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAEtC;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1D;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxC;AAMD;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACrE;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpD;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;IAEpE;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtD;AAMD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAEhC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;IAEzD;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAE5C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE1C;;;OAGG;IACH,YAAY,CAAC,CAAC,SAAS,qBAAqB,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAA;IAEjE;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;IAErD;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzB;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;IAElC;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CACtC"}
|