@cardano-sdk/projection-typeorm 0.2.0-nightly.7 → 0.2.1-test.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.
Files changed (59) hide show
  1. package/dist/cjs/createSinks.d.ts +19 -0
  2. package/dist/cjs/createSinks.d.ts.map +1 -0
  3. package/dist/cjs/createSinks.js +101 -0
  4. package/dist/cjs/createSinks.js.map +1 -0
  5. package/dist/cjs/sinks/index.d.ts +3 -0
  6. package/dist/cjs/sinks/index.d.ts.map +1 -0
  7. package/dist/cjs/sinks/index.js +8 -0
  8. package/dist/cjs/sinks/index.js.map +1 -0
  9. package/dist/cjs/sinks/stakeKeys.sink.d.ts +4 -0
  10. package/dist/cjs/sinks/stakeKeys.sink.d.ts.map +1 -0
  11. package/dist/cjs/sinks/stakeKeys.sink.js +15 -0
  12. package/dist/cjs/sinks/stakeKeys.sink.js.map +1 -0
  13. package/dist/cjs/sinks/stakePools.sink.d.ts +4 -0
  14. package/dist/cjs/sinks/stakePools.sink.d.ts.map +1 -0
  15. package/dist/cjs/sinks/stakePools.sink.js +224 -0
  16. package/dist/cjs/sinks/stakePools.sink.js.map +1 -0
  17. package/dist/cjs/sinks/util.d.ts +5 -0
  18. package/dist/cjs/sinks/util.d.ts.map +1 -0
  19. package/dist/cjs/sinks/util.js +8 -0
  20. package/dist/cjs/sinks/util.js.map +1 -0
  21. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  22. package/dist/cjs/types.d.ts +16 -0
  23. package/dist/cjs/types.d.ts.map +1 -0
  24. package/dist/cjs/types.js +3 -0
  25. package/dist/cjs/types.js.map +1 -0
  26. package/dist/cjs/util.d.ts +2 -0
  27. package/dist/cjs/util.d.ts.map +1 -0
  28. package/dist/cjs/util.js +25 -0
  29. package/dist/cjs/util.js.map +1 -0
  30. package/dist/esm/createSinks.d.ts +19 -0
  31. package/dist/esm/createSinks.d.ts.map +1 -0
  32. package/dist/esm/createSinks.js +70 -0
  33. package/dist/esm/createSinks.js.map +1 -0
  34. package/dist/esm/sinks/index.d.ts +3 -0
  35. package/dist/esm/sinks/index.d.ts.map +1 -0
  36. package/dist/esm/sinks/index.js +3 -0
  37. package/dist/esm/sinks/index.js.map +1 -0
  38. package/dist/esm/sinks/stakeKeys.sink.d.ts +4 -0
  39. package/dist/esm/sinks/stakeKeys.sink.d.ts.map +1 -0
  40. package/dist/esm/sinks/stakeKeys.sink.js +12 -0
  41. package/dist/esm/sinks/stakeKeys.sink.js.map +1 -0
  42. package/dist/esm/sinks/stakePools.sink.d.ts +4 -0
  43. package/dist/esm/sinks/stakePools.sink.d.ts.map +1 -0
  44. package/dist/esm/sinks/stakePools.sink.js +218 -0
  45. package/dist/esm/sinks/stakePools.sink.js.map +1 -0
  46. package/dist/esm/sinks/util.d.ts +5 -0
  47. package/dist/esm/sinks/util.d.ts.map +1 -0
  48. package/dist/esm/sinks/util.js +4 -0
  49. package/dist/esm/sinks/util.js.map +1 -0
  50. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  51. package/dist/esm/types.d.ts +16 -0
  52. package/dist/esm/types.d.ts.map +1 -0
  53. package/dist/esm/types.js +2 -0
  54. package/dist/esm/types.js.map +1 -0
  55. package/dist/esm/util.d.ts +2 -0
  56. package/dist/esm/util.d.ts.map +1 -0
  57. package/dist/esm/util.js +21 -0
  58. package/dist/esm/util.js.map +1 -0
  59. package/package.json +8 -8
@@ -0,0 +1,16 @@
1
+ import { BlockEntity } from './entity/Block.entity';
2
+ import { Projections, Sink, UnifiedProjectorEvent } from '@cardano-sdk/projection';
3
+ import { QueryRunner } from 'typeorm';
4
+ import { Subject } from 'rxjs';
5
+ import { WithNetworkInfo } from '@cardano-sdk/projection/dist/cjs/operators';
6
+ export interface WithTypeormContext {
7
+ queryRunner: QueryRunner;
8
+ transactionCommitted$: Subject<void>;
9
+ blockEntity: BlockEntity;
10
+ }
11
+ export interface WithTypeormSinkMetadata {
12
+ entities: Function[];
13
+ }
14
+ export declare type TypeormSink<P> = Sink<P, WithTypeormContext> & WithTypeormSinkMetadata;
15
+ export declare type TypeormSinkEvent<P> = P extends Projections.Projection<infer ExtraProps> ? UnifiedProjectorEvent<ExtraProps & WithNetworkInfo & WithTypeormContext> : never;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,oBAAY,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,uBAAuB,CAAC;AAEnF,oBAAY,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,GAChF,qBAAqB,CAAC,UAAU,GAAG,eAAe,GAAG,kBAAkB,CAAC,GACxE,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const isRecoverableTypeormError: (error: unknown) => boolean;
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,yBAAyB,UAAW,OAAO,YACS,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRecoverableTypeormError = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const recoverableErrorClasses = [
6
+ typeorm_1.AlreadyHasActiveConnectionError,
7
+ typeorm_1.CannotConnectAlreadyConnectedError,
8
+ typeorm_1.CannotExecuteNotConnectedError,
9
+ typeorm_1.CannotGetEntityManagerNotConnectedError,
10
+ typeorm_1.ConnectionIsNotSetError,
11
+ typeorm_1.ConnectionNotFoundError,
12
+ typeorm_1.NoConnectionForRepositoryError,
13
+ typeorm_1.NoConnectionOptionError,
14
+ typeorm_1.NoNeedToReleaseEntityManagerError,
15
+ typeorm_1.NoVersionOrUpdateDateColumnError,
16
+ typeorm_1.PersistedEntityNotFoundError,
17
+ typeorm_1.PessimisticLockTransactionRequiredError,
18
+ typeorm_1.QueryRunnerAlreadyReleasedError,
19
+ typeorm_1.QueryRunnerProviderAlreadyReleasedError,
20
+ typeorm_1.TransactionAlreadyStartedError,
21
+ typeorm_1.TransactionNotStartedError
22
+ ];
23
+ const isRecoverableTypeormError = (error) => recoverableErrorClasses.some((Class) => error instanceof Class);
24
+ exports.isRecoverableTypeormError = isRecoverableTypeormError;
25
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;AAAA,qCAiBiB;AAGjB,MAAM,uBAAuB,GAAG;IAC9B,yCAA+B;IAC/B,4CAAkC;IAClC,wCAA8B;IAC9B,iDAAuC;IACvC,iCAAuB;IACvB,iCAAuB;IACvB,wCAA8B;IAC9B,iCAAuB;IACvB,2CAAiC;IACjC,0CAAgC;IAChC,sCAA4B;IAC5B,iDAAuC;IACvC,yCAA+B;IAC/B,iDAAuC;IACvC,wCAA8B;IAC9B,oCAA0B;CAC3B,CAAC;AAEK,MAAM,yBAAyB,GAAG,CAAC,KAAc,EAAE,EAAE,CAC1D,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC;AADrD,QAAA,yBAAyB,6BAC4B"}
@@ -0,0 +1,19 @@
1
+ import 'reflect-metadata';
2
+ import * as supportedSinks from './sinks';
3
+ import { DataSource } from 'typeorm';
4
+ import { Observable } from 'rxjs';
5
+ import { Projections, Sinks } from '@cardano-sdk/projection';
6
+ import { RetryBackoffConfig } from 'backoff-rxjs';
7
+ import { TypeormStabilityWindowBufferProps } from './TypeormStabilityWindowBuffer';
8
+ import { WithLogger } from '@cardano-sdk/util';
9
+ export declare type ReconnectionConfig = Omit<RetryBackoffConfig, 'shouldRetry'>;
10
+ export interface TypeormSinksProps extends TypeormStabilityWindowBufferProps, WithLogger {
11
+ dataSource$: Observable<DataSource>;
12
+ reconnectionConfig?: ReconnectionConfig;
13
+ }
14
+ export declare type SupportedProjections = Pick<Projections.AllProjections, keyof typeof supportedSinks>;
15
+ export declare const createSinks: ({ dataSource$, reconnectionConfig, logger, compactBufferEveryNBlocks, allowNonSequentialBlockHeights }: TypeormSinksProps) => Sinks<SupportedProjections>;
16
+ export declare const createSinksFactory: (props: TypeormSinksProps) => () => Sinks<SupportedProjections>;
17
+ export declare type TypeormSinks = ReturnType<typeof createSinks>;
18
+ export declare type TypeormSinksFactory = () => TypeormSinks;
19
+ //# sourceMappingURL=createSinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSinks.d.ts","sourceRoot":"","sources":["../../src/createSinks.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,cAAc,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAEL,UAAU,EAYX,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,WAAW,EACX,KAAK,EAGN,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAgC,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,oBAAY,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAGzE,MAAM,WAAW,iBAAkB,SAAQ,iCAAiC,EAAE,UAAU;IAItF,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAID,oBAAY,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,OAAO,cAAc,CAAC,CAAC;AAmCjG,eAAO,MAAM,WAAW,2GAMrB,iBAAiB,KAAG,MAAM,oBAAoB,CA2EhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAW,iBAAiB,sCAA6B,CAAC;AAEzF,oBAAY,YAAY,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1D,oBAAY,mBAAmB,GAAG,MAAM,YAAY,CAAC"}
@@ -0,0 +1,70 @@
1
+ import 'reflect-metadata';
2
+ import * as supportedSinks from './sinks';
3
+ import { BlockEntity } from './entity/Block.entity';
4
+ import { ChainSyncEventType } from '@cardano-sdk/core';
5
+ import { NEVER, ReplaySubject, Subject, concat, concatMap, finalize, from, map, share, switchMap, tap, timer } from 'rxjs';
6
+ import { Operators } from '@cardano-sdk/projection';
7
+ import { retryBackoff } from 'backoff-rxjs';
8
+ import { TypeormStabilityWindowBuffer } from './TypeormStabilityWindowBuffer';
9
+ import { finalizeWithLatest } from '@cardano-sdk/util-rxjs';
10
+ import { isRecoverableTypeormError } from './util';
11
+ import omit from 'lodash/omit';
12
+ const defaultReconnectionConfig = { initialInterval: 10, maxInterval: 5000 };
13
+ const TypeormContextProps = ['blockEntity', 'queryRunner', 'transactionCommitted$'];
14
+ const withQueryRunner = (dataSource, buffer, logger) => concat(from((async () => {
15
+ const queryRunner = dataSource.createQueryRunner('master');
16
+ await queryRunner.connect();
17
+ await buffer.initialize(queryRunner);
18
+ return { queryRunner };
19
+ })()), NEVER).pipe(finalizeWithLatest(async (evt) => {
20
+ if (!evt)
21
+ return;
22
+ if (evt.queryRunner.isTransactionActive) {
23
+ try {
24
+ await evt.queryRunner.rollbackTransaction();
25
+ }
26
+ catch (error) {
27
+ logger.error('Failed to rollback transaction', error);
28
+ }
29
+ }
30
+ if (!evt.queryRunner.isReleased) {
31
+ try {
32
+ await evt.queryRunner.release();
33
+ }
34
+ catch (error) {
35
+ logger.error('Failed to "release" query runner', error);
36
+ }
37
+ }
38
+ }));
39
+ export const createSinks = ({ dataSource$, reconnectionConfig, logger, compactBufferEveryNBlocks, allowNonSequentialBlockHeights }) => {
40
+ const buffer = new TypeormStabilityWindowBuffer({ allowNonSequentialBlockHeights, compactBufferEveryNBlocks }, { logger });
41
+ return {
42
+ after: (evt$) => evt$.pipe(concatMap((evt) => from(evt.queryRunner.commitTransaction()).pipe(tap(() => evt.transactionCommitted$.next()), map(() => omit(evt, TypeormContextProps)))), retryBackoff({
43
+ ...reconnectionConfig,
44
+ ...defaultReconnectionConfig,
45
+ shouldRetry: (error) => isRecoverableTypeormError(error)
46
+ }), finalize(() => buffer.shutdown())),
47
+ before: (evt$) => evt$.pipe(share({
48
+ connector: () => new ReplaySubject(1),
49
+ resetOnComplete: false,
50
+ resetOnError: true,
51
+ resetOnRefCountZero: () => timer(3000)
52
+ }), Operators.withStaticContext(dataSource$.pipe(switchMap((dataSource) => withQueryRunner(dataSource, buffer, logger)))), Operators.withEventContext(({ queryRunner }) => from(queryRunner.startTransaction('SERIALIZABLE').then(() => ({ transactionCommitted$: new Subject() })))), Operators.withEventContext(({ block, queryRunner, eventType }) => {
53
+ const repository = queryRunner.manager.getRepository(BlockEntity);
54
+ const blockEntity = repository.create({
55
+ hash: block.header.hash,
56
+ height: block.header.blockNo,
57
+ slot: block.header.slot
58
+ });
59
+ return from(eventType === ChainSyncEventType.RollForward
60
+ ? repository.insert(blockEntity)
61
+ : repository.delete({
62
+ hash: blockEntity.hash
63
+ })).pipe(map(() => ({ blockEntity })));
64
+ })),
65
+ buffer,
66
+ projectionSinks: supportedSinks
67
+ };
68
+ };
69
+ export const createSinksFactory = (props) => () => createSinks(props);
70
+ //# sourceMappingURL=createSinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSinks.js","sourceRoot":"","sources":["../../src/createSinks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { stakeKeys } from './stakeKeys.sink';
2
+ export { stakePools } from './stakePools.sink';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sinks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { stakeKeys } from './stakeKeys.sink';
2
+ export { stakePools } from './stakePools.sink';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sinks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Projections } from '@cardano-sdk/projection';
2
+ import { TypeormSink } from '../types';
3
+ export declare const stakeKeys: TypeormSink<Projections.StakeKeysProjection>;
4
+ //# sourceMappingURL=stakeKeys.sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeKeys.sink.d.ts","sourceRoot":"","sources":["../../../src/sinks/stakeKeys.sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,mBAAmB,CAQlE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { StakeKeyEntity } from '../entity/StakeKey.entity';
2
+ import { from, map } from 'rxjs';
3
+ export const stakeKeys = {
4
+ entities: [StakeKeyEntity],
5
+ sink({ stakeKeys: { insert, del }, queryRunner }) {
6
+ const repository = queryRunner.manager.getRepository(StakeKeyEntity);
7
+ const createAll = insert.length > 0 ? repository.insert(insert.map((hash) => ({ hash }))) : Promise.resolve();
8
+ const deleteAll = del.length > 0 ? repository.delete(del) : Promise.resolve();
9
+ return from(Promise.all([createAll, deleteAll])).pipe(map(() => void 0));
10
+ }
11
+ };
12
+ //# sourceMappingURL=stakeKeys.sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeKeys.sink.js","sourceRoot":"","sources":["../../../src/sinks/stakeKeys.sink.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAiD;IACrE,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9G,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Projections } from '@cardano-sdk/projection';
2
+ import { TypeormSink } from '../types';
3
+ export declare const stakePools: TypeormSink<Projections.StakePoolsProjection>;
4
+ //# sourceMappingURL=stakePools.sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakePools.sink.d.ts","sourceRoot":"","sources":["../../../src/sinks/stakePools.sink.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAoSzD,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,oBAAoB,CAKpE,CAAC"}
@@ -0,0 +1,218 @@
1
+ import { Cardano, ChainSyncEventType, epochSlotsCalc } from '@cardano-sdk/core';
2
+ import { In, Not } from 'typeorm';
3
+ import { MaxCertificatePointerIdCertificateIndex as MaxCertificatePointerIdCertIndex, MaxCertificatePointerIdTxIndex, certificatePointerToId } from './util';
4
+ import { PoolRegistrationEntity, PoolRetirementEntity, StakePoolEntity } from '../entity';
5
+ import { from } from 'rxjs';
6
+ import omit from 'lodash/omit';
7
+ const insertMissingStakePools = async ({ stakePools: { updates }, queryRunner }) => {
8
+ if (updates.length === 0)
9
+ return;
10
+ const stakePoolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
11
+ const existingStakePoolEntities = await stakePoolsRepository.find({
12
+ select: { id: true },
13
+ where: { id: In(updates.map((update) => update.poolParameters.id)) }
14
+ });
15
+ await stakePoolsRepository.insert(updates
16
+ .filter((update) => !existingStakePoolEntities.some((existingEntity) => existingEntity.id === update.poolParameters.id))
17
+ .map(({ poolParameters: { id } }) => stakePoolsRepository.create({ id, status: Cardano.StakePoolStatus.Activating })));
18
+ };
19
+ const insertPoolUpdates = async ({ stakePools: { updates }, queryRunner, blockEntity }) => {
20
+ if (updates.length === 0)
21
+ return;
22
+ const poolUpdatesRepository = queryRunner.manager.getRepository(PoolRegistrationEntity);
23
+ const poolUpdateEntities = updates.map(({ poolParameters, source }) => poolUpdatesRepository.create({
24
+ id: certificatePointerToId(source),
25
+ ...omit(poolParameters, ['id', 'metadataJson']),
26
+ block: blockEntity,
27
+ marginPercent: poolParameters.margin.numerator / poolParameters.margin.denominator,
28
+ metadataHash: poolParameters.metadataJson?.hash,
29
+ metadataUrl: poolParameters.metadataJson?.url,
30
+ stakePool: {
31
+ id: poolParameters.id
32
+ }
33
+ }));
34
+ await poolUpdatesRepository.insert(poolUpdateEntities);
35
+ };
36
+ const insertPoolRetirements = async ({ stakePools: { retirements }, queryRunner, blockEntity }) => {
37
+ if (retirements.length === 0)
38
+ return;
39
+ const poolRetirementsRepository = queryRunner.manager.getRepository(PoolRetirementEntity);
40
+ const poolRetirementEntities = retirements.map(({ epoch, poolId, source }) => poolRetirementsRepository.create({
41
+ block: blockEntity,
42
+ id: certificatePointerToId(source),
43
+ retireAtEpoch: epoch,
44
+ stakePool: { id: poolId }
45
+ }));
46
+ await poolRetirementsRepository.insert(poolRetirementEntities);
47
+ };
48
+ const findPoolRegistrationId = async (registrationsRepository, id, query) => {
49
+ const result = await registrationsRepository.find({
50
+ order: { id: query === 'first' ? 'ASC' : 'DESC' },
51
+ select: { id: true },
52
+ take: 1,
53
+ where: { stakePool: { id } }
54
+ });
55
+ return result.length > 0 ? BigInt(result[0].id) : null;
56
+ };
57
+ const undoUpdateLatestRetirementAndRetiringStatus = async ({ queryRunner, epochNo, eraSummaries, stakePools: { retirements } }) => {
58
+ if (retirements.length === 0)
59
+ return;
60
+ const retirementsRepository = queryRunner.manager.getRepository(PoolRetirementEntity);
61
+ const poolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
62
+ const registrationsRepository = queryRunner.manager.getRepository(PoolRegistrationEntity);
63
+ const { firstSlot } = epochSlotsCalc(epochNo, eraSummaries);
64
+ const epochStartId = certificatePointerToId({
65
+ certIndex: 0,
66
+ slot: firstSlot,
67
+ txIndex: 0
68
+ });
69
+ return Promise.all(retirements.map(async ({ poolId }) => {
70
+ const lastRetirementResult = await retirementsRepository.find({
71
+ order: { id: 'DESC' },
72
+ select: { id: true },
73
+ take: 1,
74
+ where: { stakePool: { id: poolId } }
75
+ });
76
+ const lastRetirement = lastRetirementResult[0];
77
+ const firstRegistrationId = await findPoolRegistrationId(registrationsRepository, poolId, 'first');
78
+ if (!firstRegistrationId) {
79
+ return;
80
+ }
81
+ const status = await (async () => {
82
+ if (!lastRetirement)
83
+ return firstRegistrationId > epochStartId
84
+ ? Cardano.StakePoolStatus.Activating
85
+ : Cardano.StakePoolStatus.Active;
86
+ const lastRegistrationId = await findPoolRegistrationId(registrationsRepository, poolId, 'last');
87
+ return lastRegistrationId > lastRetirement.id
88
+ ? Cardano.StakePoolStatus.Active
89
+ : Cardano.StakePoolStatus.Retiring;
90
+ })();
91
+ await poolsRepository.update(poolId, {
92
+ lastRetirement,
93
+ status
94
+ });
95
+ }));
96
+ };
97
+ const undoUpdateLatestRegistration = ({ queryRunner, stakePools: { updates } }) => {
98
+ const poolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
99
+ const registrationsRepository = queryRunner.manager.getRepository(PoolRegistrationEntity);
100
+ return Promise.all(updates.map(async ({ poolParameters: { id } }) => {
101
+ const lastRegistrationId = await findPoolRegistrationId(registrationsRepository, id, 'last');
102
+ await (lastRegistrationId
103
+ ? poolsRepository.update(id, { lastRegistration: { id: lastRegistrationId } })
104
+ : poolsRepository.delete(id));
105
+ }));
106
+ };
107
+ const undoUpdateLatestCertificatesAndDeletePoolsWithZeroRegistrations = (evt) => Promise.all([undoUpdateLatestRegistration(evt), undoUpdateLatestRetirementAndRetiringStatus(evt)]);
108
+ const computeCertificateIdRange = (epochNo, eraSummaries) => {
109
+ const { firstSlot, lastSlot } = epochSlotsCalc(epochNo, eraSummaries);
110
+ const minId = certificatePointerToId({
111
+ certIndex: 0,
112
+ slot: firstSlot,
113
+ txIndex: 0
114
+ });
115
+ const maxId = certificatePointerToId({
116
+ certIndex: MaxCertificatePointerIdCertIndex,
117
+ slot: lastSlot,
118
+ txIndex: MaxCertificatePointerIdTxIndex
119
+ });
120
+ return { maxId, minId };
121
+ };
122
+ const updatePoolStatusWhere = async (where, newStatus, dependencies) => {
123
+ if (where.firstRegisteredInEpoch < 0)
124
+ return;
125
+ const { minId, maxId } = computeCertificateIdRange(where.firstRegisteredInEpoch, dependencies.eraSummaries);
126
+ const queryResult = await dependencies.queryRunner.query(`
127
+ SELECT sp.id
128
+ FROM stake_pool sp
129
+ JOIN pool_registration r1 ON (sp.id = r1.stake_pool_id)
130
+ LEFT OUTER JOIN pool_registration r2 ON (sp.id = r2.stake_pool_id AND r1.id > r2.id)
131
+ WHERE r2.id IS NULL AND sp.status='${where.currentStatus}' AND r1.id >= ${minId} AND r1.id <= ${maxId};
132
+ `);
133
+ if (queryResult.length > 0) {
134
+ const stakePoolsRepository = dependencies.queryRunner.manager.getRepository(StakePoolEntity);
135
+ await stakePoolsRepository.update(queryResult.map((pool) => pool.id), { status: newStatus });
136
+ }
137
+ };
138
+ const activateOnRollover = async ({ queryRunner, crossEpochBoundary, eraSummaries, epochNo }) => {
139
+ if (!crossEpochBoundary)
140
+ return;
141
+ await updatePoolStatusWhere({
142
+ currentStatus: Cardano.StakePoolStatus.Activating,
143
+ firstRegisteredInEpoch: Cardano.EpochNo(epochNo - 2)
144
+ }, Cardano.StakePoolStatus.Active, { eraSummaries, queryRunner });
145
+ };
146
+ const undoActivateOnRollover = async ({ queryRunner, eraSummaries, crossEpochBoundary, epochNo }) => {
147
+ if (!crossEpochBoundary)
148
+ return;
149
+ await updatePoolStatusWhere({
150
+ currentStatus: Cardano.StakePoolStatus.Active,
151
+ firstRegisteredInEpoch: Cardano.EpochNo(epochNo - 1)
152
+ }, Cardano.StakePoolStatus.Activating, { eraSummaries, queryRunner });
153
+ };
154
+ const findPoolsRetiringAtEpoch = (repository, epochNo) => repository.find({
155
+ relations: { lastRetirement: true },
156
+ select: { id: true },
157
+ where: { lastRetirement: { retireAtEpoch: epochNo } }
158
+ });
159
+ const retireOnRollover = async ({ queryRunner, crossEpochBoundary, epochNo }) => {
160
+ if (!crossEpochBoundary)
161
+ return;
162
+ const stakePoolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
163
+ const retiredPools = await findPoolsRetiringAtEpoch(stakePoolsRepository, epochNo);
164
+ if (retiredPools.length > 0) {
165
+ await stakePoolsRepository.update(retiredPools.map(({ id }) => id), { status: Cardano.StakePoolStatus.Retired });
166
+ }
167
+ };
168
+ const undoRetireOnRollover = async ({ queryRunner, crossEpochBoundary, epochNo }) => {
169
+ if (!crossEpochBoundary)
170
+ return;
171
+ const stakePoolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
172
+ const retiredPools = await findPoolsRetiringAtEpoch(stakePoolsRepository, Cardano.EpochNo(epochNo + 1));
173
+ if (retiredPools.length > 0) {
174
+ await stakePoolsRepository.update(retiredPools.map(({ id }) => id), { status: Cardano.StakePoolStatus.Retiring });
175
+ }
176
+ };
177
+ const updateLatestCertificates = async ({ queryRunner, stakePools: { updates, retirements } }) => {
178
+ const stakePoolsRepository = queryRunner.manager.getRepository(StakePoolEntity);
179
+ await Promise.all([
180
+ Promise.all(updates.map(({ poolParameters: { id }, source }) => stakePoolsRepository.update(id, {
181
+ lastRegistration: { id: certificatePointerToId(source) }
182
+ }))),
183
+ Promise.all(retirements.map(({ poolId, source }) => stakePoolsRepository.update({
184
+ id: poolId,
185
+ status: Not(Cardano.StakePoolStatus.Retired)
186
+ }, {
187
+ lastRetirement: { id: certificatePointerToId(source) },
188
+ status: Cardano.StakePoolStatus.Retiring
189
+ })))
190
+ ]);
191
+ };
192
+ const reactivateRetired = async ({ queryRunner, stakePools: { updates } }) => {
193
+ if (updates.length === 0)
194
+ return;
195
+ await queryRunner.manager.query(`
196
+ UPDATE stake_pool
197
+ SET status='activating'
198
+ WHERE status='retired' AND last_registration_id > last_retirement_id;
199
+ `);
200
+ };
201
+ const rollForward = async (evt) => {
202
+ await Promise.all([activateOnRollover(evt), retireOnRollover(evt)]);
203
+ await insertMissingStakePools(evt);
204
+ await Promise.all([insertPoolUpdates(evt), insertPoolRetirements(evt)]);
205
+ await updateLatestCertificates(evt);
206
+ await reactivateRetired(evt);
207
+ };
208
+ const rollBackward = async (evt) => {
209
+ await Promise.all([undoActivateOnRollover(evt), undoRetireOnRollover(evt)]);
210
+ await undoUpdateLatestCertificatesAndDeletePoolsWithZeroRegistrations(evt);
211
+ };
212
+ export const stakePools = {
213
+ entities: [StakePoolEntity, PoolRegistrationEntity, PoolRetirementEntity],
214
+ sink(evt) {
215
+ return from(evt.eventType === ChainSyncEventType.RollForward ? rollForward(evt) : rollBackward(evt));
216
+ }
217
+ };
218
+ //# sourceMappingURL=stakePools.sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakePools.sink.js","sourceRoot":"","sources":["../../../src/sinks/stakePools.sink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Operators } from '@cardano-sdk/projection';
2
+ export declare const certificatePointerToId: ({ slot, certIndex, txIndex }: Operators.CertificatePointer) => bigint;
3
+ export declare const MaxCertificatePointerIdTxIndex = 99999;
4
+ export declare const MaxCertificatePointerIdCertificateIndex = 9999;
5
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/sinks/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,eAAO,MAAM,sBAAsB,iCAAkC,UAAU,kBAAkB,WACjB,CAAC;AAEjF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AACrD,eAAO,MAAM,uCAAuC,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const certificatePointerToId = ({ slot, certIndex, txIndex }) => BigInt(slot) * 10000000000n + BigInt(txIndex) * 10000n + BigInt(certIndex);
2
+ export const MaxCertificatePointerIdTxIndex = 99999;
3
+ export const MaxCertificatePointerIdCertificateIndex = 9999;
4
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/sinks/util.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAgC,EAAE,EAAE,CACnG,MAAM,CAAC,IAAI,CAAC,GAAG,YAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,MAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAM,CAAC;AACrD,MAAM,CAAC,MAAM,uCAAuC,GAAG,IAAI,CAAC"}