@cardano-sdk/projection-typeorm 0.5.2 → 0.6.0
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/cjs/TypeormStabilityWindowBuffer.d.ts +6 -7
- package/dist/cjs/TypeormStabilityWindowBuffer.d.ts.map +1 -1
- package/dist/cjs/TypeormStabilityWindowBuffer.js +40 -108
- package/dist/cjs/TypeormStabilityWindowBuffer.js.map +1 -1
- package/dist/cjs/createDataSource.d.ts +13 -0
- package/dist/cjs/createDataSource.d.ts.map +1 -1
- package/dist/cjs/createDataSource.js +53 -2
- package/dist/cjs/createDataSource.js.map +1 -1
- package/dist/cjs/createTypeormTipTracker.d.ts +16 -0
- package/dist/cjs/createTypeormTipTracker.d.ts.map +1 -0
- package/dist/cjs/createTypeormTipTracker.js +55 -0
- package/dist/cjs/createTypeormTipTracker.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/operators/withTypeormTransaction.d.ts +10 -11
- package/dist/cjs/operators/withTypeormTransaction.d.ts.map +1 -1
- package/dist/cjs/operators/withTypeormTransaction.js +4 -33
- package/dist/cjs/operators/withTypeormTransaction.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/TypeormStabilityWindowBuffer.d.ts +6 -7
- package/dist/esm/TypeormStabilityWindowBuffer.d.ts.map +1 -1
- package/dist/esm/TypeormStabilityWindowBuffer.js +41 -109
- package/dist/esm/TypeormStabilityWindowBuffer.js.map +1 -1
- package/dist/esm/createDataSource.d.ts +13 -0
- package/dist/esm/createDataSource.d.ts.map +1 -1
- package/dist/esm/createDataSource.js +49 -1
- package/dist/esm/createDataSource.js.map +1 -1
- package/dist/esm/createTypeormTipTracker.d.ts +16 -0
- package/dist/esm/createTypeormTipTracker.d.ts.map +1 -0
- package/dist/esm/createTypeormTipTracker.js +51 -0
- package/dist/esm/createTypeormTipTracker.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/operators/withTypeormTransaction.d.ts +10 -11
- package/dist/esm/operators/withTypeormTransaction.d.ts.map +1 -1
- package/dist/esm/operators/withTypeormTransaction.js +5 -34
- package/dist/esm/operators/withTypeormTransaction.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { Cardano } from '@cardano-sdk/core';
|
|
2
|
-
import { QueryRunner } from 'typeorm';
|
|
3
2
|
import { Observable } from 'rxjs';
|
|
4
3
|
import { ProjectionEvent, StabilityWindowBuffer } from '@cardano-sdk/projection';
|
|
4
|
+
import { ReconnectionConfig } from '@cardano-sdk/util-rxjs';
|
|
5
|
+
import { TypeormConnection } from './createDataSource';
|
|
5
6
|
import { WithLogger } from '@cardano-sdk/util';
|
|
6
7
|
import { WithTypeormContext } from './operators';
|
|
7
8
|
export interface TypeormStabilityWindowBufferProps extends WithLogger {
|
|
8
9
|
compactBufferEveryNBlocks?: number;
|
|
9
|
-
|
|
10
|
+
connection$: Observable<TypeormConnection>;
|
|
11
|
+
reconnectionConfig: ReconnectionConfig;
|
|
10
12
|
}
|
|
11
13
|
export declare class TypeormStabilityWindowBuffer implements StabilityWindowBuffer {
|
|
12
14
|
#private;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
constructor({ allowNonSequentialBlockHeights, compactBufferEveryNBlocks, logger }: TypeormStabilityWindowBufferProps);
|
|
15
|
+
constructor({ compactBufferEveryNBlocks, connection$, logger, reconnectionConfig }: TypeormStabilityWindowBufferProps);
|
|
16
|
+
getBlock(id: Cardano.BlockId): Observable<Cardano.Block | null>;
|
|
16
17
|
storeBlockData<T extends ProjectionEvent<WithTypeormContext>>(): (evt$: Observable<T>) => Observable<T>;
|
|
17
|
-
initialize(queryRunner: QueryRunner): Promise<void>;
|
|
18
|
-
shutdown(): void;
|
|
19
18
|
}
|
|
20
19
|
//# sourceMappingURL=TypeormStabilityWindowBuffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeormStabilityWindowBuffer.d.ts","sourceRoot":"","sources":["../../src/TypeormStabilityWindowBuffer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAsB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TypeormStabilityWindowBuffer.d.ts","sourceRoot":"","sources":["../../src/TypeormStabilityWindowBuffer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAsB,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAyD,MAAM,MAAM,CAAC;AACzF,OAAO,EAAE,eAAe,EAAoB,qBAAqB,EAAmB,MAAM,yBAAyB,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,iCAAkC,SAAQ,UAAU;IAInE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAInC,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAI3C,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,qBAAa,4BAA6B,YAAW,qBAAqB;;gBAM5D,EACV,yBAA+B,EAC/B,WAAW,EACX,MAAM,EACN,kBAAkB,EACnB,EAAE,iCAAiC;IAUpC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAuB/D,cAAc,CAAC,CAAC,SAAS,eAAe,CAAC,kBAAkB,CAAC,YAC5C,WAAW,CAAC,CAAC;CAgD9B"}
|
|
@@ -10,72 +10,59 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _TypeormStabilityWindowBuffer_instances,
|
|
13
|
+
var _TypeormStabilityWindowBuffer_instances, _TypeormStabilityWindowBuffer_queryRunner$, _TypeormStabilityWindowBuffer_retryBackoffConfig, _TypeormStabilityWindowBuffer_logger, _TypeormStabilityWindowBuffer_compactEvery, _TypeormStabilityWindowBuffer_rollForward, _TypeormStabilityWindowBuffer_deleteOldBlockData;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.TypeormStabilityWindowBuffer = void 0;
|
|
16
16
|
const entity_1 = require("./entity");
|
|
17
17
|
const core_1 = require("@cardano-sdk/core");
|
|
18
18
|
const typeorm_1 = require("typeorm");
|
|
19
19
|
const rxjs_1 = require("rxjs");
|
|
20
|
+
const backoff_rxjs_1 = require("backoff-rxjs");
|
|
20
21
|
const util_1 = require("@cardano-sdk/util");
|
|
21
|
-
const
|
|
22
|
-
if (typeof point1 !== 'object') {
|
|
23
|
-
return point1 === point2;
|
|
24
|
-
}
|
|
25
|
-
if (typeof point2 !== 'object') {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
return point1.header.hash === point2.header.hash;
|
|
29
|
-
};
|
|
30
|
-
const blockDataSelect = {
|
|
31
|
-
data: true
|
|
32
|
-
};
|
|
22
|
+
const isRecoverableTypeormError_1 = require("./isRecoverableTypeormError");
|
|
33
23
|
class TypeormStabilityWindowBuffer {
|
|
34
|
-
constructor({
|
|
24
|
+
constructor({ compactBufferEveryNBlocks = 100, connection$, logger, reconnectionConfig }) {
|
|
35
25
|
_TypeormStabilityWindowBuffer_instances.add(this);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_TypeormStabilityWindowBuffer_tip$.set(this, new rxjs_1.ReplaySubject(1));
|
|
39
|
-
_TypeormStabilityWindowBuffer_tail$.set(this, new rxjs_1.ReplaySubject(1));
|
|
26
|
+
_TypeormStabilityWindowBuffer_queryRunner$.set(this, void 0);
|
|
27
|
+
_TypeormStabilityWindowBuffer_retryBackoffConfig.set(this, void 0);
|
|
40
28
|
_TypeormStabilityWindowBuffer_logger.set(this, void 0);
|
|
41
29
|
_TypeormStabilityWindowBuffer_compactEvery.set(this, void 0);
|
|
42
|
-
_TypeormStabilityWindowBuffer_allowNonSequentialBlockHeights.set(this, void 0);
|
|
43
30
|
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_compactEvery, compactBufferEveryNBlocks, "f");
|
|
44
|
-
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_allowNonSequentialBlockHeights, allowNonSequentialBlockHeights, "f");
|
|
45
31
|
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_logger, (0, util_1.contextLogger)(logger, 'TypeormStabilityWindowBuffer'), "f");
|
|
46
|
-
this
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
32
|
+
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_queryRunner$, connection$.pipe((0, rxjs_1.map)(({ queryRunner }) => queryRunner)), "f");
|
|
33
|
+
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_retryBackoffConfig, {
|
|
34
|
+
...reconnectionConfig,
|
|
35
|
+
shouldRetry: isRecoverableTypeormError_1.isRecoverableTypeormError
|
|
36
|
+
}, "f");
|
|
51
37
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
38
|
+
getBlock(id) {
|
|
39
|
+
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_logger, "f").debug('getBlock', id);
|
|
40
|
+
return __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_queryRunner$, "f").pipe((0, rxjs_1.switchMap)((queryRunner) => {
|
|
41
|
+
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_logger, "f").debug('getBlock query runner');
|
|
42
|
+
const repository = queryRunner.manager.getRepository(entity_1.BlockDataEntity);
|
|
43
|
+
return (0, rxjs_1.from)((async () => {
|
|
44
|
+
const blockDataEntity = await repository.findOne({ where: { block: { hash: id } } });
|
|
45
|
+
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_logger, "f").debug('getBlock found', blockDataEntity);
|
|
46
|
+
return blockDataEntity?.data || null;
|
|
47
|
+
})());
|
|
48
|
+
}), (0, rxjs_1.take)(1), (0, rxjs_1.catchError)((err) => {
|
|
49
|
+
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_logger, "f").error(err);
|
|
50
|
+
throw err;
|
|
51
|
+
}), (0, backoff_rxjs_1.retryBackoff)(__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_retryBackoffConfig, "f")));
|
|
64
52
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
storeBlockData() {
|
|
54
|
+
return (evt$) => evt$.pipe((0, rxjs_1.concatMap)((evt) => {
|
|
55
|
+
if (evt.eventType === core_1.ChainSyncEventType.RollForward &&
|
|
56
|
+
evt.block.header.blockNo >= evt.tip.blockNo - evt.genesisParameters.securityParameter) {
|
|
57
|
+
return (0, rxjs_1.from)(__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_rollForward).call(this, evt)).pipe((0, rxjs_1.map)(() => evt));
|
|
58
|
+
}
|
|
59
|
+
return (0, rxjs_1.of)(evt);
|
|
60
|
+
}));
|
|
68
61
|
}
|
|
69
62
|
}
|
|
70
63
|
exports.TypeormStabilityWindowBuffer = TypeormStabilityWindowBuffer;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
order: { blockHeight: 'ASC' },
|
|
74
|
-
select: blockDataSelect,
|
|
75
|
-
take: 1
|
|
76
|
-
});
|
|
77
|
-
}, _TypeormStabilityWindowBuffer_rollForward = async function _TypeormStabilityWindowBuffer_rollForward(evt) {
|
|
78
|
-
const { eventType, transactionCommitted$, queryRunner, block } = evt;
|
|
64
|
+
_TypeormStabilityWindowBuffer_queryRunner$ = new WeakMap(), _TypeormStabilityWindowBuffer_retryBackoffConfig = new WeakMap(), _TypeormStabilityWindowBuffer_logger = new WeakMap(), _TypeormStabilityWindowBuffer_compactEvery = new WeakMap(), _TypeormStabilityWindowBuffer_instances = new WeakSet(), _TypeormStabilityWindowBuffer_rollForward = async function _TypeormStabilityWindowBuffer_rollForward(evt) {
|
|
65
|
+
const { eventType, queryRunner, block } = evt;
|
|
79
66
|
const { header: { blockNo } } = block;
|
|
80
67
|
const repository = queryRunner.manager.getRepository(entity_1.BlockDataEntity);
|
|
81
68
|
if (eventType === core_1.ChainSyncEventType.RollForward) {
|
|
@@ -87,70 +74,15 @@ _TypeormStabilityWindowBuffer_tail = new WeakMap(), _TypeormStabilityWindowBuffe
|
|
|
87
74
|
data: block
|
|
88
75
|
});
|
|
89
76
|
await Promise.all([repository.insert(blockData), __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_deleteOldBlockData).call(this, evt)]);
|
|
90
|
-
transactionCommitted$.subscribe(() => {
|
|
91
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_setTip).call(this, block);
|
|
92
|
-
if (__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_tail, "f") === 'origin') {
|
|
93
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_setTail).call(this, block);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
77
|
}
|
|
97
|
-
},
|
|
98
|
-
|
|
99
|
-
const prevTip = await repository.findOne({
|
|
100
|
-
order: {
|
|
101
|
-
blockHeight: 'DESC'
|
|
102
|
-
},
|
|
103
|
-
select: blockDataSelect,
|
|
104
|
-
where: {
|
|
105
|
-
blockHeight: (0, typeorm_1.LessThan)(blockNo)
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
if (!__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_allowNonSequentialBlockHeights, "f") && prevTip?.data && blockNo !== prevTip?.data.header.blockNo + 1) {
|
|
109
|
-
throw new Error('Assert: inconsistent PgStabilityWindowBuffer at rollBackward');
|
|
110
|
-
}
|
|
111
|
-
transactionCommitted$.subscribe(() => {
|
|
112
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_setTip).call(this, prevTip?.data || 'origin');
|
|
113
|
-
if (!prevTip?.data) {
|
|
114
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_setTail).call(this, 'origin');
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}, _TypeormStabilityWindowBuffer_deleteOldBlockData = async function _TypeormStabilityWindowBuffer_deleteOldBlockData({ genesisParameters: { securityParameter }, block: { header: { blockNo } }, queryRunner, transactionCommitted$ }) {
|
|
118
|
-
if (blockNo < securityParameter || blockNo % __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_compactEvery, "f") !== 0) {
|
|
78
|
+
}, _TypeormStabilityWindowBuffer_deleteOldBlockData = async function _TypeormStabilityWindowBuffer_deleteOldBlockData({ genesisParameters: { securityParameter }, block: { header: { blockNo } }, queryRunner }) {
|
|
79
|
+
if (blockNo % __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_compactEvery, "f") !== 0) {
|
|
119
80
|
return;
|
|
120
81
|
}
|
|
121
82
|
const repository = queryRunner.manager.getRepository(entity_1.BlockDataEntity);
|
|
122
83
|
const nextTailBlockHeight = blockNo - securityParameter;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
data: true
|
|
127
|
-
},
|
|
128
|
-
where: {
|
|
129
|
-
blockHeight: nextTailBlockHeight
|
|
130
|
-
}
|
|
131
|
-
}),
|
|
132
|
-
repository.delete({
|
|
133
|
-
blockHeight: (0, typeorm_1.LessThan)(nextTailBlockHeight)
|
|
134
|
-
})
|
|
135
|
-
]);
|
|
136
|
-
if (!nextTailEntity) {
|
|
137
|
-
if (__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_allowNonSequentialBlockHeights, "f")) {
|
|
138
|
-
[nextTailEntity] = await __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_findTail).call(this, repository);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
throw new Error('Assert: inconsistent PgStabilityWindowBuffer at #deleteOldBlockData');
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
transactionCommitted$.subscribe(() => __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_instances, "m", _TypeormStabilityWindowBuffer_setTail).call(this, nextTailEntity.data));
|
|
145
|
-
}, _TypeormStabilityWindowBuffer_setTail = function _TypeormStabilityWindowBuffer_setTail(tail) {
|
|
146
|
-
if (!pointEquals(tail, __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_tail, "f"))) {
|
|
147
|
-
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_tail, tail, "f");
|
|
148
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_tail$, "f").next(tail);
|
|
149
|
-
}
|
|
150
|
-
}, _TypeormStabilityWindowBuffer_setTip = function _TypeormStabilityWindowBuffer_setTip(tip) {
|
|
151
|
-
if (!pointEquals(tip, __classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_tip, "f"))) {
|
|
152
|
-
__classPrivateFieldSet(this, _TypeormStabilityWindowBuffer_tip, tip, "f");
|
|
153
|
-
__classPrivateFieldGet(this, _TypeormStabilityWindowBuffer_tip$, "f").next(tip);
|
|
154
|
-
}
|
|
84
|
+
await repository.delete({
|
|
85
|
+
blockHeight: (0, typeorm_1.LessThan)(nextTailBlockHeight)
|
|
86
|
+
});
|
|
155
87
|
};
|
|
156
88
|
//# sourceMappingURL=TypeormStabilityWindowBuffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeormStabilityWindowBuffer.js","sourceRoot":"","sources":["../../src/TypeormStabilityWindowBuffer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,qCAA2C;AAC3C,4CAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"TypeormStabilityWindowBuffer.js","sourceRoot":"","sources":["../../src/TypeormStabilityWindowBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
import { DataSource, DataSourceOptions, QueryRunner } from 'typeorm';
|
|
3
3
|
import { Logger } from 'ts-log';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
import { PgBossExtension } from './pgBoss';
|
|
4
6
|
export interface DataSourceExtensions {
|
|
5
7
|
pgBoss?: boolean;
|
|
6
8
|
}
|
|
@@ -20,5 +22,16 @@ export interface CreateDataSourceProps {
|
|
|
20
22
|
}
|
|
21
23
|
export declare const pgBossSchemaExists: (queryRunner: QueryRunner) => Promise<boolean>;
|
|
22
24
|
export declare const createDataSource: ({ connectionConfig, devOptions, options, entities, extensions, logger }: CreateDataSourceProps) => DataSource;
|
|
25
|
+
export declare type CreateObservableDataSourceProps = Omit<CreateDataSourceProps, 'connectionConfig'> & {
|
|
26
|
+
connectionConfig$: Observable<PgConnectionConfig>;
|
|
27
|
+
};
|
|
28
|
+
export declare const createObservableDataSource: ({ connectionConfig$, ...rest }: CreateObservableDataSourceProps) => Observable<DataSource>;
|
|
29
|
+
export interface TypeormConnection {
|
|
30
|
+
queryRunner: QueryRunner;
|
|
31
|
+
pgBoss?: PgBossExtension;
|
|
32
|
+
}
|
|
33
|
+
export declare type ConnectProps = Pick<CreateObservableDataSourceProps, 'extensions' | 'logger'>;
|
|
34
|
+
export declare const connect: ({ logger, extensions }: ConnectProps) => (dataSource$: Observable<DataSource>) => Observable<TypeormConnection>;
|
|
35
|
+
export declare const createObservableConnection: (props: CreateObservableDataSourceProps) => Observable<TypeormConnection>;
|
|
23
36
|
export {};
|
|
24
37
|
//# sourceMappingURL=createDataSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDataSource.d.ts","sourceRoot":"","sources":["../../src/createDataSource.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAkD,WAAW,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"createDataSource.d.ts","sourceRoot":"","sources":["../../src/createDataSource.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAkD,WAAW,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAS,UAAU,EAA2B,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,eAAe,EAAuC,MAAM,UAAU,CAAC;AAMhF,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,aAAK,yBAAyB,GAAG,iBAAiB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE1E,oBAAY,kBAAkB,GAAG,IAAI,CACnC,yBAAyB,EACzB,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAC/D,CAAC;AAEF,oBAAY,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC;AAE9F,oBAAY,cAAc,GAAG,IAAI,CAC/B,yBAAyB,EACvB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,uBAAuB,GACvB,UAAU,GACV,OAAO,GACP,eAAe,GACf,YAAY,CACf,GAAG,EAAE,CAAC;AAEP,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAoDD,eAAO,MAAM,kBAAkB,gBAAuB,WAAW,qBAKhE,CAAC;AA8BF,eAAO,MAAM,gBAAgB,4EAO1B,qBAAqB,eAuBvB,CAAC;AAEF,oBAAY,+BAA+B,GAAG,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,GAAG;IAC9F,iBAAiB,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,0BAA0B,mCAAoC,+BAA+B,2BAyBvG,CAAC;AAEJ,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAsBD,oBAAY,YAAY,GAAG,IAAI,CAAC,+BAA+B,EAAE,YAAY,GAAG,QAAQ,CAAC,CAAC;AAY1F,eAAO,MAAM,OAAO,2BACO,YAAY,mBACvB,WAAW,UAAU,CAAC,kCAOjC,CAAC;AAEN,eAAO,MAAM,0BAA0B,UAAW,+BAA+B,KAAG,WAAW,iBAAiB,CACxD,CAAC"}
|
|
@@ -3,11 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createDataSource = exports.pgBossSchemaExists = void 0;
|
|
6
|
+
exports.createObservableConnection = exports.connect = exports.createObservableDataSource = exports.createDataSource = exports.pgBossSchemaExists = void 0;
|
|
7
7
|
require("reflect-metadata");
|
|
8
8
|
const typeorm_1 = require("typeorm");
|
|
9
|
-
const
|
|
9
|
+
const rxjs_1 = require("rxjs");
|
|
10
10
|
const pgBoss_1 = require("./pgBoss");
|
|
11
|
+
const util_1 = require("@cardano-sdk/util");
|
|
12
|
+
const util_rxjs_1 = require("@cardano-sdk/util-rxjs");
|
|
11
13
|
const logger_1 = require("./logger");
|
|
12
14
|
const snakeCase_1 = __importDefault(require("lodash/snakeCase"));
|
|
13
15
|
const toTableName = (tableOrName) => (typeof tableOrName === 'string' ? tableOrName : tableOrName.name).replace('_entity', '');
|
|
@@ -110,4 +112,53 @@ const createDataSource = ({ connectionConfig, devOptions, options, entities, ext
|
|
|
110
112
|
});
|
|
111
113
|
};
|
|
112
114
|
exports.createDataSource = createDataSource;
|
|
115
|
+
const createObservableDataSource = ({ connectionConfig$, ...rest }) => connectionConfig$.pipe((0, rxjs_1.switchMap)((connectionConfig) => (0, rxjs_1.concat)((0, rxjs_1.from)((async () => {
|
|
116
|
+
const dataSource = (0, exports.createDataSource)({
|
|
117
|
+
connectionConfig,
|
|
118
|
+
...rest
|
|
119
|
+
});
|
|
120
|
+
await dataSource.initialize();
|
|
121
|
+
return dataSource;
|
|
122
|
+
})()), rxjs_1.NEVER).pipe((0, util_rxjs_1.finalizeWithLatest)(async (dataSource) => {
|
|
123
|
+
try {
|
|
124
|
+
await dataSource?.destroy();
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
rest.logger.error('Failed to destroy data source', error);
|
|
128
|
+
}
|
|
129
|
+
}))));
|
|
130
|
+
exports.createObservableDataSource = createObservableDataSource;
|
|
131
|
+
const releaseConnection = ({ logger }) => async (connection) => {
|
|
132
|
+
if (!connection)
|
|
133
|
+
return;
|
|
134
|
+
if (connection.queryRunner.isTransactionActive) {
|
|
135
|
+
try {
|
|
136
|
+
await connection.queryRunner.rollbackTransaction();
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
logger.warn('Failed to rollback transaction', error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (!connection.queryRunner.isReleased) {
|
|
143
|
+
try {
|
|
144
|
+
await connection.queryRunner.release();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.warn('Failed to "release" query runner', error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const createConnection = async (dataSource, { logger, extensions }) => {
|
|
152
|
+
const queryRunner = dataSource.createQueryRunner('master');
|
|
153
|
+
await queryRunner.connect();
|
|
154
|
+
if (extensions?.pgBoss) {
|
|
155
|
+
const pgBoss = (0, pgBoss_1.createPgBossExtension)(queryRunner, logger);
|
|
156
|
+
return { pgBoss, queryRunner };
|
|
157
|
+
}
|
|
158
|
+
return { queryRunner };
|
|
159
|
+
};
|
|
160
|
+
const connect = ({ logger, extensions }) => (dataSource$) => dataSource$.pipe((0, rxjs_1.switchMap)((dataSource) => (0, rxjs_1.concat)((0, rxjs_1.from)(createConnection(dataSource, { extensions, logger })), rxjs_1.NEVER).pipe((0, util_rxjs_1.finalizeWithLatest)(releaseConnection({ logger })))));
|
|
161
|
+
exports.connect = connect;
|
|
162
|
+
const createObservableConnection = (props) => (0, exports.createObservableDataSource)(props).pipe((0, exports.connect)(props));
|
|
163
|
+
exports.createObservableConnection = createObservableConnection;
|
|
113
164
|
//# sourceMappingURL=createDataSource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDataSource.js","sourceRoot":"","sources":["../../src/createDataSource.ts"],"names":[],"mappings":";;;;;;AAAA,4BAA0B;AAC1B,qCAAqH;AAErH,
|
|
1
|
+
{"version":3,"file":"createDataSource.js","sourceRoot":"","sources":["../../src/createDataSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseProjectionEvent } from '@cardano-sdk/projection';
|
|
2
|
+
import { TipOrOrigin } from '@cardano-sdk/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { ReconnectionConfig } from '@cardano-sdk/util-rxjs';
|
|
5
|
+
import { TypeormConnection } from './createDataSource';
|
|
6
|
+
export interface CreateTypeormTipTrackerProps {
|
|
7
|
+
connection$: Observable<TypeormConnection>;
|
|
8
|
+
reconnectionConfig: ReconnectionConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare const createTypeormTipTracker: ({ connection$, reconnectionConfig }: CreateTypeormTipTrackerProps) => {
|
|
11
|
+
shutdown: () => void;
|
|
12
|
+
tip$: Observable<TipOrOrigin>;
|
|
13
|
+
trackProjectedTip: <T extends BaseProjectionEvent>() => (evt$: Observable<T>) => Observable<T>;
|
|
14
|
+
};
|
|
15
|
+
export declare type TypeormTipTracker = ReturnType<typeof createTypeormTipTracker>;
|
|
16
|
+
//# sourceMappingURL=createTypeormTipTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTypeormTipTracker.d.ts","sourceRoot":"","sources":["../../src/createTypeormTipTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAsB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAsD,MAAM,MAAM,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAI3C,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,eAAO,MAAM,uBAAuB,wCAAyC,4BAA4B;;;;CA8DxG,CAAC;AAEF,oBAAY,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTypeormTipTracker = void 0;
|
|
4
|
+
const entity_1 = require("./entity");
|
|
5
|
+
const core_1 = require("@cardano-sdk/core");
|
|
6
|
+
const rxjs_1 = require("rxjs");
|
|
7
|
+
const backoff_rxjs_1 = require("backoff-rxjs");
|
|
8
|
+
const isRecoverableTypeormError_1 = require("./isRecoverableTypeormError");
|
|
9
|
+
const createTypeormTipTracker = ({ connection$, reconnectionConfig }) => {
|
|
10
|
+
const retryBackoffConfig = {
|
|
11
|
+
...reconnectionConfig,
|
|
12
|
+
shouldRetry: isRecoverableTypeormError_1.isRecoverableTypeormError
|
|
13
|
+
};
|
|
14
|
+
const queryLocalTip$ = connection$.pipe((0, rxjs_1.switchMap)(({ queryRunner }) => {
|
|
15
|
+
const blockRepo = queryRunner.manager.getRepository(entity_1.BlockEntity);
|
|
16
|
+
return (0, rxjs_1.from)((async () => {
|
|
17
|
+
const tipQueryResult = await blockRepo.find({
|
|
18
|
+
order: { slot: 'DESC' },
|
|
19
|
+
take: 1
|
|
20
|
+
});
|
|
21
|
+
if (tipQueryResult.length === 0) {
|
|
22
|
+
return 'origin';
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
blockNo: tipQueryResult[0].height,
|
|
26
|
+
hash: tipQueryResult[0].hash,
|
|
27
|
+
slot: tipQueryResult[0].slot
|
|
28
|
+
};
|
|
29
|
+
})());
|
|
30
|
+
}), (0, rxjs_1.take)(1), (0, backoff_rxjs_1.retryBackoff)(retryBackoffConfig));
|
|
31
|
+
const tip$ = new rxjs_1.ReplaySubject(1);
|
|
32
|
+
const trackProjectedTip = () => (evt$) => evt$.pipe((0, rxjs_1.switchMap)((evt) => {
|
|
33
|
+
if (evt.eventType === core_1.ChainSyncEventType.RollForward) {
|
|
34
|
+
tip$.next(evt.block.header);
|
|
35
|
+
return (0, rxjs_1.of)(evt);
|
|
36
|
+
}
|
|
37
|
+
return queryLocalTip$.pipe((0, rxjs_1.tap)((tip) => tip$.next(tip)), (0, rxjs_1.map)(() => evt));
|
|
38
|
+
}));
|
|
39
|
+
return {
|
|
40
|
+
shutdown: tip$.complete.bind(tip$),
|
|
41
|
+
tip$: (() => {
|
|
42
|
+
let initialized = false;
|
|
43
|
+
return new rxjs_1.Observable((subscriber) => {
|
|
44
|
+
if (!initialized) {
|
|
45
|
+
queryLocalTip$.subscribe((next) => tip$.next(next));
|
|
46
|
+
initialized = true;
|
|
47
|
+
}
|
|
48
|
+
return tip$.subscribe(subscriber);
|
|
49
|
+
});
|
|
50
|
+
})(),
|
|
51
|
+
trackProjectedTip
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
exports.createTypeormTipTracker = createTypeormTipTracker;
|
|
55
|
+
//# sourceMappingURL=createTypeormTipTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTypeormTipTracker.js","sourceRoot":"","sources":["../../src/createTypeormTipTracker.ts"],"names":[],"mappings":";;;AACA,qCAAuC;AACvC,4CAAoE;AACpE,+BAAsF;AAEtF,+CAAgE;AAEhE,2EAAwE;AAUjE,MAAM,uBAAuB,GAAG,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAgC,EAAE,EAAE;IAC3G,MAAM,kBAAkB,GAAuB;QAC7C,GAAG,kBAAkB;QACrB,WAAW,EAAE,qDAAyB;KACvC,CAAC;IACF,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CACrC,IAAA,gBAAS,EAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,oBAAW,CAAC,CAAC;QACjE,OAAO,IAAA,WAAI,EACT,CAAC,KAAK,IAA0B,EAAE;YAIhC,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;gBAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACvB,IAAI,EAAE,CAAC;aACR,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B,OAAO,QAAQ,CAAC;aACjB;YACD,OAAO;gBACL,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAO;gBAClC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAK;gBAC7B,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAK;aAC9B,CAAC;QACJ,CAAC,CAAC,EAAE,CACL,CAAC;IACJ,CAAC,CAAC,EACF,IAAA,WAAI,EAAC,CAAC,CAAC,EACP,IAAA,2BAAY,EAAC,kBAAkB,CAAC,CACjC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,oBAAa,CAAc,CAAC,CAAC,CAAC;IAC/C,MAAM,iBAAiB,GACrB,GAAkC,EAAE,CACpC,CAAC,IAAmB,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CACP,IAAA,gBAAS,EAAC,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,GAAG,CAAC,SAAS,KAAK,yBAAkB,CAAC,WAAW,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO,IAAA,SAAE,EAAC,GAAG,CAAC,CAAC;SAChB;QACD,OAAO,cAAc,CAAC,IAAI,CACxB,IAAA,UAAG,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5B,IAAA,UAAG,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CACf,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACN,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,IAAI,EAAE,CAAC,GAAG,EAAE;YACV,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO,IAAI,iBAAU,CAAc,CAAC,UAAU,EAAE,EAAE;gBAChD,IAAI,CAAC,WAAW,EAAE;oBAEhB,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC;iBACpB;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,EAAE;QACJ,iBAAiB;KAClB,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,uBAAuB,2BA8DlC"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ export * from './entity';
|
|
|
5
5
|
export * from './operators';
|
|
6
6
|
export * from './TypeormStabilityWindowBuffer';
|
|
7
7
|
export * from './isRecoverableTypeormError';
|
|
8
|
+
export * from './createTypeormTipTracker';
|
|
8
9
|
export { STAKE_POOL_METADATA_QUEUE, STAKE_POOL_METRICS_UPDATE, StakePoolMetadataJob, StakePoolMetricsUpdateJob, createPgBoss, createPgBossExtension } from './pgBoss';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACtB,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,EACZ,qBAAqB,EACtB,MAAM,UAAU,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -22,6 +22,7 @@ __exportStar(require("./entity"), exports);
|
|
|
22
22
|
__exportStar(require("./operators"), exports);
|
|
23
23
|
__exportStar(require("./TypeormStabilityWindowBuffer"), exports);
|
|
24
24
|
__exportStar(require("./isRecoverableTypeormError"), exports);
|
|
25
|
+
__exportStar(require("./createTypeormTipTracker"), exports);
|
|
25
26
|
var pgBoss_1 = require("./pgBoss");
|
|
26
27
|
Object.defineProperty(exports, "STAKE_POOL_METADATA_QUEUE", { enumerable: true, get: function () { return pgBoss_1.STAKE_POOL_METADATA_QUEUE; } });
|
|
27
28
|
Object.defineProperty(exports, "STAKE_POOL_METRICS_UPDATE", { enumerable: true, get: function () { return pgBoss_1.STAKE_POOL_METRICS_UPDATE; } });
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAC1B,qEAAmD;AACnD,qDAAmC;AACnC,2CAAyB;AACzB,8CAA4B;AAC5B,iEAA+C;AAC/C,8DAA4C;AAC5C,mCAOkB;AANhB,mHAAA,yBAAyB,OAAA;AACzB,mHAAA,yBAAyB,OAAA;AAGzB,sGAAA,YAAY,OAAA;AACZ,+GAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAC1B,qEAAmD;AACnD,qDAAmC;AACnC,2CAAyB;AACzB,8CAA4B;AAC5B,iEAA+C;AAC/C,8DAA4C;AAC5C,4DAA0C;AAC1C,mCAOkB;AANhB,mHAAA,yBAAyB,OAAA;AACzB,mHAAA,yBAAyB,OAAA;AAGzB,sGAAA,YAAY,OAAA;AACZ,+GAAA,qBAAqB,OAAA"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DataSourceExtensions } from '../createDataSource';
|
|
3
|
-
import { Observable, Subject } from 'rxjs';
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
4
2
|
import { PgBossExtension } from '../pgBoss';
|
|
5
3
|
import { ProjectionEvent, UnifiedExtChainSyncOperator } from '@cardano-sdk/projection';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { QueryRunner } from 'typeorm';
|
|
5
|
+
import { TypeormConnection } from '../createDataSource';
|
|
6
|
+
export interface WithTypeormTransactionDependencies {
|
|
7
|
+
connection$: Observable<TypeormConnection>;
|
|
9
8
|
}
|
|
10
9
|
export interface WithTypeormContext {
|
|
11
10
|
queryRunner: QueryRunner;
|
|
12
|
-
transactionCommitted$: Subject<void>;
|
|
13
11
|
}
|
|
14
12
|
export interface WithPgBoss {
|
|
15
13
|
pgBoss: PgBossExtension;
|
|
16
14
|
}
|
|
17
15
|
declare type TypeormContextProp = keyof (WithTypeormContext & WithPgBoss);
|
|
18
|
-
export declare function withTypeormTransaction<Props>(dependencies: WithTypeormTransactionDependencies
|
|
19
|
-
|
|
16
|
+
export declare function withTypeormTransaction<Props>(dependencies: WithTypeormTransactionDependencies & {
|
|
17
|
+
pgBoss?: false;
|
|
18
|
+
}): UnifiedExtChainSyncOperator<Props, Props & WithTypeormContext>;
|
|
19
|
+
export declare function withTypeormTransaction<Props>(dependencies: WithTypeormTransactionDependencies & {
|
|
20
20
|
pgBoss: true;
|
|
21
21
|
}): UnifiedExtChainSyncOperator<Props, Props & WithTypeormContext & WithPgBoss>;
|
|
22
|
-
export declare
|
|
23
|
-
export declare const typeormTransactionCommit: <T extends WithTypeormContext>() => (evt$: Observable<ProjectionEvent<T>>) => Observable<ProjectionEvent<Omit<T, keyof WithTypeormContext | "pgBoss">>>;
|
|
22
|
+
export declare const typeormTransactionCommit: <T extends WithTypeormContext>() => (evt$: Observable<ProjectionEvent<T>>) => Observable<ProjectionEvent<Omit<T, "pgBoss" | "queryRunner">>>;
|
|
24
23
|
export {};
|
|
25
24
|
//# sourceMappingURL=withTypeormTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withTypeormTransaction.d.ts","sourceRoot":"","sources":["../../../src/operators/withTypeormTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"withTypeormTransaction.d.ts","sourceRoot":"","sources":["../../../src/operators/withTypeormTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAuC,MAAM,MAAM,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,2BAA2B,EAG5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,aAAK,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC;AAGlE,wBAAgB,sBAAsB,CAAC,KAAK,EAC1C,YAAY,EAAE,kCAAkC,GAAG;IAAE,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GACpE,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB,CAAC,CAAC;AAElE,wBAAgB,sBAAsB,CAAC,KAAK,EAC1C,YAAY,EAAE,kCAAkC,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAClE,2BAA2B,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB,GAAG,UAAU,CAAC,CAAC;AAkC/E,eAAO,MAAM,wBAAwB,8IAchC,CAAC"}
|
|
@@ -5,43 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.typeormTransactionCommit = exports.withTypeormTransaction = void 0;
|
|
7
7
|
const rxjs_1 = require("rxjs");
|
|
8
|
-
const pgBoss_1 = require("../pgBoss");
|
|
9
8
|
const projection_1 = require("@cardano-sdk/projection");
|
|
10
|
-
const util_rxjs_1 = require("@cardano-sdk/util-rxjs");
|
|
11
9
|
const omit_1 = __importDefault(require("lodash/omit"));
|
|
12
|
-
const WithTypeormTransactionProps = ['queryRunner', '
|
|
13
|
-
function withTypeormTransaction({
|
|
14
|
-
return (evt$) => evt$.pipe((0, projection_1.withStaticContext)((0, rxjs_1.defer)(() =>
|
|
15
|
-
const queryRunner = dataSource.createQueryRunner('master');
|
|
16
|
-
await queryRunner.connect();
|
|
17
|
-
if (extensions?.pgBoss) {
|
|
18
|
-
const pgBoss = (0, pgBoss_1.createPgBossExtension)(queryRunner, logger);
|
|
19
|
-
return { pgBoss, queryRunner };
|
|
20
|
-
}
|
|
21
|
-
return { queryRunner };
|
|
22
|
-
})()), rxjs_1.NEVER).pipe((0, util_rxjs_1.finalizeWithLatest)(async (evt) => {
|
|
23
|
-
if (!evt)
|
|
24
|
-
return;
|
|
25
|
-
if (evt.queryRunner.isTransactionActive) {
|
|
26
|
-
try {
|
|
27
|
-
await evt.queryRunner.rollbackTransaction();
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
logger.error('Failed to rollback transaction', error);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (!evt.queryRunner.isReleased) {
|
|
34
|
-
try {
|
|
35
|
-
await evt.queryRunner.release();
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
logger.error('Failed to "release" query runner', error);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
})))))), (0, projection_1.withEventContext)(({ queryRunner }) => (0, rxjs_1.from)(queryRunner.startTransaction('SERIALIZABLE').then(() => ({ transactionCommitted$: new rxjs_1.Subject() })))));
|
|
10
|
+
const WithTypeormTransactionProps = ['queryRunner', 'pgBoss'];
|
|
11
|
+
function withTypeormTransaction({ connection$ }) {
|
|
12
|
+
return (evt$) => evt$.pipe((0, projection_1.withStaticContext)((0, rxjs_1.defer)(() => connection$)), (0, projection_1.withEventContext)(({ queryRunner }) => (0, rxjs_1.from)(queryRunner.startTransaction('SERIALIZABLE').then(() => ({ transactionCommitted$: new rxjs_1.Subject() })))));
|
|
42
13
|
}
|
|
43
14
|
exports.withTypeormTransaction = withTypeormTransaction;
|
|
44
|
-
const typeormTransactionCommit = () => (evt$) => evt$.pipe((0, rxjs_1.mergeMap)((evt) => (0, rxjs_1.from)(evt.queryRunner.commitTransaction()).pipe((0, rxjs_1.
|
|
15
|
+
const typeormTransactionCommit = () => (evt$) => evt$.pipe((0, rxjs_1.mergeMap)((evt) => (0, rxjs_1.from)(evt.queryRunner.commitTransaction()).pipe((0, rxjs_1.map)(() => {
|
|
45
16
|
const result = (0, omit_1.default)(evt, WithTypeormTransactionProps);
|
|
46
17
|
return result;
|
|
47
18
|
}))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withTypeormTransaction.js","sourceRoot":"","sources":["../../../src/operators/withTypeormTransaction.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"withTypeormTransaction.js","sourceRoot":"","sources":["../../../src/operators/withTypeormTransaction.ts"],"names":[],"mappings":";;;;;;AACA,+BAAuE;AAEvE,wDAMiC;AAGjC,uDAA+B;AAe/B,MAAM,2BAA2B,GAA8B,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAezF,SAAgB,sBAAsB,CAAQ,EAC5C,WAAW,EAC+C;IAK1D,OAAO,CAAC,IAA0C,EAAE,EAAE,CACpD,IAAI,CAAC,IAAI,CACP,IAAA,8BAAiB,EAAC,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,EAC3C,IAAA,6BAAgB,EAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CACnC,IAAA,WAAI,EAMF,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,cAAO,EAAQ,EAAE,CAAC,CAAC,CAC1G,CACF,CACF,CAAC;AACN,CAAC;AArBD,wDAqBC;AAMM,MAAM,wBAAwB,GACnC,GAAiC,EAAE,CACnC,CAAC,IAAoC,EAA4D,EAAE,CACjG,IAAI,CAAC,IAAI,CACP,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE,CACf,IAAA,WAAI,EAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAC5C,IAAA,UAAG,EAAC,GAAG,EAAE;IAGP,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IACtD,OAAO,MAAsD,CAAC;AAChE,CAAC,CAAC,CACH,CACF,CACF,CAAC;AAdO,QAAA,wBAAwB,4BAc/B"}
|