@lido-nestjs/registry 1.0.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 (63) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +14 -0
  3. package/dist/fetch/interfaces/key.interface.d.ts +7 -0
  4. package/dist/fetch/interfaces/module.interface.d.ts +14 -0
  5. package/dist/fetch/interfaces/operator.interface.d.ts +10 -0
  6. package/dist/fetch/interfaces/overrides.interface.d.ts +10 -0
  7. package/dist/fetch/key.constants.d.ts +1 -0
  8. package/dist/fetch/key.constants.js +7 -0
  9. package/dist/fetch/key.fetch.d.ts +13 -0
  10. package/dist/fetch/key.fetch.js +49 -0
  11. package/dist/fetch/meta.fetch.d.ts +8 -0
  12. package/dist/fetch/meta.fetch.js +23 -0
  13. package/dist/fetch/operator.constants.d.ts +1 -0
  14. package/dist/fetch/operator.constants.js +7 -0
  15. package/dist/fetch/operator.fetch.d.ts +13 -0
  16. package/dist/fetch/operator.fetch.js +55 -0
  17. package/dist/fetch/registry-fetch.module.d.ts +8 -0
  18. package/dist/fetch/registry-fetch.module.js +79 -0
  19. package/dist/fetch/registry-fetch.service.d.ts +2 -0
  20. package/dist/fetch/registry-fetch.service.js +12 -0
  21. package/dist/index.d.ts +22 -0
  22. package/dist/index.js +96 -0
  23. package/dist/main/abstract-registry.d.ts +52 -0
  24. package/dist/main/abstract-registry.js +211 -0
  25. package/dist/main/constants.d.ts +1 -0
  26. package/dist/main/constants.js +7 -0
  27. package/dist/main/interfaces/module.interface.d.ts +11 -0
  28. package/dist/main/key-registry/key-registry.module.d.ts +8 -0
  29. package/dist/main/key-registry/key-registry.module.js +57 -0
  30. package/dist/main/key-registry/key-registry.service.d.ts +9 -0
  31. package/dist/main/key-registry/key-registry.service.js +22 -0
  32. package/dist/main/validator-registry/validator-registry.module.d.ts +8 -0
  33. package/dist/main/validator-registry/validator-registry.module.js +57 -0
  34. package/dist/main/validator-registry/validator-registry.service.d.ts +7 -0
  35. package/dist/main/validator-registry/validator-registry.service.js +18 -0
  36. package/dist/storage/interfaces/module.interface.d.ts +9 -0
  37. package/dist/storage/key.entity.d.ts +12 -0
  38. package/dist/storage/key.entity.js +41 -0
  39. package/dist/storage/key.repository.d.ts +4 -0
  40. package/dist/storage/key.repository.js +10 -0
  41. package/dist/storage/key.storage.d.ts +22 -0
  42. package/dist/storage/key.storage.js +59 -0
  43. package/dist/storage/meta.entity.d.ts +10 -0
  44. package/dist/storage/meta.entity.js +36 -0
  45. package/dist/storage/meta.repository.d.ts +4 -0
  46. package/dist/storage/meta.repository.js +10 -0
  47. package/dist/storage/meta.storage.d.ts +12 -0
  48. package/dist/storage/meta.storage.js +34 -0
  49. package/dist/storage/operator.entity.d.ts +14 -0
  50. package/dist/storage/operator.entity.js +56 -0
  51. package/dist/storage/operator.repository.d.ts +4 -0
  52. package/dist/storage/operator.repository.js +10 -0
  53. package/dist/storage/operator.storage.d.ts +18 -0
  54. package/dist/storage/operator.storage.js +48 -0
  55. package/dist/storage/registry-storage.module.d.ts +8 -0
  56. package/dist/storage/registry-storage.module.js +57 -0
  57. package/dist/storage/registry-storage.service.d.ts +8 -0
  58. package/dist/storage/registry-storage.service.js +25 -0
  59. package/dist/utils/meta.utils.d.ts +2 -0
  60. package/dist/utils/meta.utils.js +15 -0
  61. package/dist/utils/operator.utils.d.ts +2 -0
  62. package/dist/utils/operator.utils.js +17 -0
  63. package/package.json +56 -0
@@ -0,0 +1,12 @@
1
+ import { RegistryMeta } from './meta.entity';
2
+ import { RegistryMetaRepository } from './meta.repository';
3
+ export declare class RegistryMetaStorageService {
4
+ private readonly repository;
5
+ constructor(repository: RegistryMetaRepository);
6
+ /** returns meta */
7
+ get(): Promise<RegistryMeta | null>;
8
+ /** removes meta */
9
+ remove(): Promise<number>;
10
+ /** saves meta */
11
+ save(registryMeta: RegistryMeta): Promise<void>;
12
+ }
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var common = require('@nestjs/common');
7
+ var core = require('@mikro-orm/core');
8
+ var meta_entity = require('./meta.entity.js');
9
+ var meta_repository = require('./meta.repository.js');
10
+
11
+ exports.RegistryMetaStorageService = class RegistryMetaStorageService {
12
+ constructor(repository) {
13
+ this.repository = repository;
14
+ }
15
+ /** returns meta */
16
+ async get() {
17
+ var _a;
18
+ const result = await this.repository.find({}, { orderBy: { blockNumber: core.QueryOrder.DESC }, limit: 1 });
19
+ return (_a = result[0]) !== null && _a !== void 0 ? _a : null;
20
+ }
21
+ /** removes meta */
22
+ async remove() {
23
+ return await this.repository.nativeDelete({});
24
+ }
25
+ /** saves meta */
26
+ async save(registryMeta) {
27
+ const metaData = new meta_entity.RegistryMeta(registryMeta);
28
+ return await this.repository.persistAndFlush(metaData);
29
+ }
30
+ };
31
+ exports.RegistryMetaStorageService = tslib.__decorate([
32
+ common.Injectable(),
33
+ tslib.__metadata("design:paramtypes", [meta_repository.RegistryMetaRepository])
34
+ ], exports.RegistryMetaStorageService);
@@ -0,0 +1,14 @@
1
+ import { EntityRepositoryType } from '@mikro-orm/core';
2
+ import { RegistryOperatorRepository } from './operator.repository';
3
+ export declare class RegistryOperator {
4
+ [EntityRepositoryType]?: RegistryOperatorRepository;
5
+ constructor(operator: RegistryOperator);
6
+ index: number;
7
+ active: boolean;
8
+ name: string;
9
+ rewardAddress: string;
10
+ stakingLimit: number;
11
+ stoppedValidators: number;
12
+ totalSigningKeys: number;
13
+ usedSigningKeys: number;
14
+ }
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var core = require('@mikro-orm/core');
7
+ var operator_repository = require('./operator.repository.js');
8
+
9
+ exports.RegistryOperator = class RegistryOperator {
10
+ constructor(operator) {
11
+ this.index = operator.index;
12
+ this.active = operator.active;
13
+ this.name = operator.name;
14
+ this.rewardAddress = operator.rewardAddress.toLocaleLowerCase();
15
+ this.stakingLimit = operator.stakingLimit;
16
+ this.stoppedValidators = operator.stoppedValidators;
17
+ this.totalSigningKeys = operator.totalSigningKeys;
18
+ this.usedSigningKeys = operator.usedSigningKeys;
19
+ }
20
+ };
21
+ tslib.__decorate([
22
+ core.PrimaryKey(),
23
+ tslib.__metadata("design:type", Number)
24
+ ], exports.RegistryOperator.prototype, "index", void 0);
25
+ tslib.__decorate([
26
+ core.Property(),
27
+ tslib.__metadata("design:type", Boolean)
28
+ ], exports.RegistryOperator.prototype, "active", void 0);
29
+ tslib.__decorate([
30
+ core.Property({ length: 256 }),
31
+ tslib.__metadata("design:type", String)
32
+ ], exports.RegistryOperator.prototype, "name", void 0);
33
+ tslib.__decorate([
34
+ core.Property({ length: 42 }),
35
+ tslib.__metadata("design:type", String)
36
+ ], exports.RegistryOperator.prototype, "rewardAddress", void 0);
37
+ tslib.__decorate([
38
+ core.Property(),
39
+ tslib.__metadata("design:type", Number)
40
+ ], exports.RegistryOperator.prototype, "stakingLimit", void 0);
41
+ tslib.__decorate([
42
+ core.Property(),
43
+ tslib.__metadata("design:type", Number)
44
+ ], exports.RegistryOperator.prototype, "stoppedValidators", void 0);
45
+ tslib.__decorate([
46
+ core.Property(),
47
+ tslib.__metadata("design:type", Number)
48
+ ], exports.RegistryOperator.prototype, "totalSigningKeys", void 0);
49
+ tslib.__decorate([
50
+ core.Property(),
51
+ tslib.__metadata("design:type", Number)
52
+ ], exports.RegistryOperator.prototype, "usedSigningKeys", void 0);
53
+ exports.RegistryOperator = tslib.__decorate([
54
+ core.Entity({ customRepository: () => operator_repository.RegistryOperatorRepository }),
55
+ tslib.__metadata("design:paramtypes", [exports.RegistryOperator])
56
+ ], exports.RegistryOperator);
@@ -0,0 +1,4 @@
1
+ import { EntityRepository } from '@mikro-orm/sqlite';
2
+ import { RegistryOperator } from './operator.entity';
3
+ export declare class RegistryOperatorRepository extends EntityRepository<RegistryOperator> {
4
+ }
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var sqlite = require('@mikro-orm/sqlite');
6
+
7
+ class RegistryOperatorRepository extends sqlite.EntityRepository {
8
+ }
9
+
10
+ exports.RegistryOperatorRepository = RegistryOperatorRepository;
@@ -0,0 +1,18 @@
1
+ import { RegistryOperator } from './operator.entity';
2
+ import { RegistryOperatorRepository } from './operator.repository';
3
+ export declare class RegistryOperatorStorageService {
4
+ private readonly repository;
5
+ constructor(repository: RegistryOperatorRepository);
6
+ /** find all operators */
7
+ findAll(): Promise<RegistryOperator[]>;
8
+ /** find operator by index */
9
+ findOneByIndex(operatorIndex: number): Promise<RegistryOperator | null>;
10
+ /** removes operator by index */
11
+ removeOneByIndex(operatorIndex: number): Promise<number>;
12
+ /** removes all operators */
13
+ removeAll(): Promise<number>;
14
+ /** saves operator to storage */
15
+ saveOne(operator: RegistryOperator): Promise<void>;
16
+ /** saves multiply operators to storage */
17
+ save(operators: RegistryOperator[]): Promise<import("@mikro-orm/core").EntityManager<import("@mikro-orm/core").IDatabaseDriver<import("@mikro-orm/core").Connection>>[]>;
18
+ }
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var common = require('@nestjs/common');
7
+ var operator_entity = require('./operator.entity.js');
8
+ var operator_repository = require('./operator.repository.js');
9
+
10
+ exports.RegistryOperatorStorageService = class RegistryOperatorStorageService {
11
+ constructor(repository) {
12
+ this.repository = repository;
13
+ }
14
+ /** find all operators */
15
+ async findAll() {
16
+ return await this.repository.findAll();
17
+ }
18
+ /** find operator by index */
19
+ async findOneByIndex(operatorIndex) {
20
+ return await this.repository.findOne({ index: operatorIndex });
21
+ }
22
+ /** removes operator by index */
23
+ async removeOneByIndex(operatorIndex) {
24
+ return await this.repository.nativeDelete({ index: operatorIndex });
25
+ }
26
+ /** removes all operators */
27
+ async removeAll() {
28
+ return await this.repository.nativeDelete({});
29
+ }
30
+ /** saves operator to storage */
31
+ async saveOne(operator) {
32
+ const key = new operator_entity.RegistryOperator(operator);
33
+ return await this.repository.persistAndFlush(key);
34
+ }
35
+ /** saves multiply operators to storage */
36
+ async save(operators) {
37
+ const result = await Promise.all(operators.map(async (operator) => {
38
+ const instance = new operator_entity.RegistryOperator(operator);
39
+ return await this.repository.persist(instance);
40
+ }));
41
+ this.repository.flush();
42
+ return result;
43
+ }
44
+ };
45
+ exports.RegistryOperatorStorageService = tslib.__decorate([
46
+ common.Injectable(),
47
+ tslib.__metadata("design:paramtypes", [operator_repository.RegistryOperatorRepository])
48
+ ], exports.RegistryOperatorStorageService);
@@ -0,0 +1,8 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { RegistryStorageModuleSyncOptions, RegistryStorageModuleAsyncOptions } from './interfaces/module.interface';
3
+ export declare class RegistryStorageModule {
4
+ static forRoot(options?: RegistryStorageModuleSyncOptions): DynamicModule;
5
+ static forRootAsync(options: RegistryStorageModuleAsyncOptions): DynamicModule;
6
+ static forFeature(options?: RegistryStorageModuleSyncOptions): DynamicModule;
7
+ static forFeatureAsync(options: RegistryStorageModuleAsyncOptions): DynamicModule;
8
+ }
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var common = require('@nestjs/common');
7
+ var registryStorage_service = require('./registry-storage.service.js');
8
+ var operator_storage = require('./operator.storage.js');
9
+ var meta_storage = require('./meta.storage.js');
10
+ var key_storage = require('./key.storage.js');
11
+ var nestjs = require('@mikro-orm/nestjs');
12
+ var key_entity = require('./key.entity.js');
13
+ var operator_entity = require('./operator.entity.js');
14
+ var meta_entity = require('./meta.entity.js');
15
+
16
+ var RegistryStorageModule_1;
17
+ exports.RegistryStorageModule = RegistryStorageModule_1 = class RegistryStorageModule {
18
+ static forRoot(options) {
19
+ return Object.assign({ global: true }, this.forFeature(options));
20
+ }
21
+ static forRootAsync(options) {
22
+ return Object.assign({ global: true }, this.forFeatureAsync(options));
23
+ }
24
+ static forFeature(options) {
25
+ return {
26
+ module: RegistryStorageModule_1,
27
+ imports: options === null || options === void 0 ? void 0 : options.imports,
28
+ };
29
+ }
30
+ static forFeatureAsync(options) {
31
+ return {
32
+ module: RegistryStorageModule_1,
33
+ imports: options.imports,
34
+ };
35
+ }
36
+ };
37
+ exports.RegistryStorageModule = RegistryStorageModule_1 = tslib.__decorate([
38
+ common.Module({
39
+ imports: [
40
+ nestjs.MikroOrmModule.forFeature({
41
+ entities: [key_entity.RegistryKey, operator_entity.RegistryOperator, meta_entity.RegistryMeta],
42
+ }),
43
+ ],
44
+ providers: [
45
+ registryStorage_service.RegistryStorageService,
46
+ operator_storage.RegistryOperatorStorageService,
47
+ meta_storage.RegistryMetaStorageService,
48
+ key_storage.RegistryKeyStorageService,
49
+ ],
50
+ exports: [
51
+ registryStorage_service.RegistryStorageService,
52
+ operator_storage.RegistryOperatorStorageService,
53
+ meta_storage.RegistryMetaStorageService,
54
+ key_storage.RegistryKeyStorageService,
55
+ ],
56
+ })
57
+ ], exports.RegistryStorageModule);
@@ -0,0 +1,8 @@
1
+ import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
2
+ import { MikroORM } from '@mikro-orm/core';
3
+ export declare class RegistryStorageService implements OnModuleInit, OnModuleDestroy {
4
+ private readonly orm;
5
+ constructor(orm: MikroORM);
6
+ onModuleInit(): Promise<void>;
7
+ onModuleDestroy(): Promise<void>;
8
+ }
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var common = require('@nestjs/common');
7
+ var core = require('@mikro-orm/core');
8
+
9
+ exports.RegistryStorageService = class RegistryStorageService {
10
+ constructor(orm) {
11
+ this.orm = orm;
12
+ }
13
+ async onModuleInit() {
14
+ // TODO: think about migrations
15
+ const generator = this.orm.getSchemaGenerator();
16
+ await generator.updateSchema();
17
+ }
18
+ async onModuleDestroy() {
19
+ await this.orm.close();
20
+ }
21
+ };
22
+ exports.RegistryStorageService = tslib.__decorate([
23
+ common.Injectable(),
24
+ tslib.__metadata("design:paramtypes", [core.MikroORM])
25
+ ], exports.RegistryStorageService);
@@ -0,0 +1,2 @@
1
+ import { RegistryMeta } from '../storage/meta.entity';
2
+ export declare const compareMeta: (metaOne: RegistryMeta | null, metaTwo: RegistryMeta | null) => boolean;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const compareMeta = (metaOne, metaTwo) => {
6
+ if (metaOne == null)
7
+ return false;
8
+ if (metaTwo == null)
9
+ return false;
10
+ const keysOpIndexOne = metaOne.keysOpIndex;
11
+ const keysOpIndexTwo = metaTwo.keysOpIndex;
12
+ return keysOpIndexOne === keysOpIndexTwo;
13
+ };
14
+
15
+ exports.compareMeta = compareMeta;
@@ -0,0 +1,2 @@
1
+ import { RegistryOperator } from '../storage/operator.entity';
2
+ export declare const compareOperators: (operatorOne: RegistryOperator | null, operatorTwo: RegistryOperator | null) => boolean;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const compareOperators = (operatorOne, operatorTwo) => {
6
+ if (operatorOne == null)
7
+ return false;
8
+ if (operatorTwo == null)
9
+ return false;
10
+ const addressOne = operatorOne.rewardAddress.toLocaleLowerCase();
11
+ const addressTwo = operatorTwo.rewardAddress.toLocaleLowerCase();
12
+ if (addressOne !== addressTwo)
13
+ return false;
14
+ return true;
15
+ };
16
+
17
+ exports.compareOperators = compareOperators;
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@lido-nestjs/registry",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/lidofinance/lido-nestjs-modules",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/lidofinance/lido-nestjs-modules.git",
11
+ "directory": "packages/registry"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/lidofinance/lido-nestjs-modules/issues"
15
+ },
16
+ "sideEffects": false,
17
+ "keywords": [
18
+ "lido",
19
+ "lido-nestjs",
20
+ "lido-nestjs-modules",
21
+ "lidofinance"
22
+ ],
23
+ "files": [
24
+ "dist/*"
25
+ ],
26
+ "publishConfig": {
27
+ "registry": "https://registry.npmjs.org/",
28
+ "access": "public"
29
+ },
30
+ "dependencies": {
31
+ "@lido-nestjs/contracts": "2.1.0",
32
+ "@lido-nestjs/decorators": "1.0.0",
33
+ "@lido-nestjs/logger": "1.1.0",
34
+ "@lido-nestjs/utils": "1.1.0",
35
+ "@mikro-orm/core": "^5.0.1",
36
+ "@mikro-orm/nestjs": "^4.3.1",
37
+ "@mikro-orm/sqlite": "^5.0.3",
38
+ "cron": "^2.0.0"
39
+ },
40
+ "peerDependencies": {
41
+ "@nestjs/common": "^8.2.5",
42
+ "@nestjs/core": "^8.2.5",
43
+ "reflect-metadata": "^0.1.13",
44
+ "rxjs": "^7.5.2",
45
+ "tslib": "^2.3.1"
46
+ },
47
+ "devDependencies": {
48
+ "@lido-nestjs/execution": "1.7.0",
49
+ "@nestjs/common": "^8.2.5",
50
+ "@nestjs/core": "^8.2.5",
51
+ "@nestjs/testing": "^8.2.5",
52
+ "@types/cron": "^2",
53
+ "reflect-metadata": "^0.1.13",
54
+ "rxjs": "^7.5.2"
55
+ }
56
+ }