@bsv/wallet-toolbox 1.6.3 → 1.6.4

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 (31) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  3. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  4. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  5. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  6. package/mobile/package-lock.json +2 -2
  7. package/mobile/package.json +1 -1
  8. package/out/src/services/chaintracker/chaintracks/index.all.d.ts +3 -0
  9. package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
  10. package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
  11. package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
  12. package/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  13. package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  14. package/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  15. package/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  16. package/out/tsconfig.all.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/src/services/chaintracker/chaintracks/index.all.ts +4 -0
  19. package/src/services/chaintracker/chaintracks/index.client.ts +0 -3
  20. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +0 -30
  21. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +0 -1
  22. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js +0 -149
  23. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +0 -1
  24. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts +0 -23
  25. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +0 -1
  26. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +0 -57
  27. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +0 -1
  28. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts +0 -16
  29. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +0 -1
  30. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +0 -53
  31. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/wallet-toolbox",
3
- "version": "1.6.3",
3
+ "version": "1.6.4",
4
4
  "description": "BRC100 conforming wallet, wallet storage and wallet signer components",
5
5
  "main": "./out/src/index.js",
6
6
  "types": "./out/src/index.d.ts",
@@ -5,3 +5,7 @@ export * from './Storage/ChaintracksStorageKnex'
5
5
  export * from './Storage/ChaintracksStorageMemory'
6
6
 
7
7
  export * from './createDefaultKnexChaintracksOptions'
8
+
9
+ export * from './ChaintracksService'
10
+ export * from './Ingest/BulkIngestorWhatsOnChainWs'
11
+ export * from './Ingest/LiveIngestorWhatsOnChainWs'
@@ -10,7 +10,6 @@ export * from './Api/LiveIngestorApi'
10
10
  export * from './Api/BlockHeaderApi'
11
11
 
12
12
  export * from './Chaintracks'
13
- export * from './ChaintracksService'
14
13
  export * from './ChaintracksServiceClient'
15
14
 
16
15
  export * from './Ingest/BulkIngestorBase'
@@ -19,9 +18,7 @@ export * from './Ingest/LiveIngestorBase'
19
18
  export * from './Ingest/BulkIngestorCDN'
20
19
  export * from './Ingest/BulkIngestorCDNBabbage'
21
20
  export * from './Ingest/BulkIngestorWhatsOnChainCdn'
22
- export * from './Ingest/BulkIngestorWhatsOnChainWs'
23
21
  export * from './Ingest/LiveIngestorWhatsOnChainPoll'
24
- export * from './Ingest/LiveIngestorWhatsOnChainWs'
25
22
  export * from './Ingest/WhatsOnChainServices'
26
23
 
27
24
  export * from './Storage/BulkStorageBase'
@@ -1,30 +0,0 @@
1
- import { Chaintracks } from './Chaintracks';
2
- import { IncomingMessage, Server, ServerResponse } from 'http';
3
- import { Chain } from '../../../sdk/types';
4
- import { Services } from '../../Services';
5
- export interface ChaintracksServiceOptions {
6
- chain: Chain;
7
- /**
8
- * prepended to the path of each registered service endpoint
9
- */
10
- routingPrefix: string;
11
- /**
12
- * Defaults to default configured Chaintracks instance with NoDb storage.
13
- */
14
- chaintracks?: Chaintracks;
15
- services?: Services;
16
- port?: number;
17
- }
18
- export declare class ChaintracksService {
19
- static createChaintracksServiceOptions(chain: Chain): ChaintracksServiceOptions;
20
- chain: Chain;
21
- options: ChaintracksServiceOptions;
22
- port?: number;
23
- chaintracks: Chaintracks;
24
- services: Services;
25
- server?: Server<typeof IncomingMessage, typeof ServerResponse>;
26
- constructor(options: ChaintracksServiceOptions);
27
- stopJsonRpcServer(): Promise<void>;
28
- startJsonRpcServer(port?: number): Promise<void>;
29
- }
30
- //# sourceMappingURL=ChaintracksService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChaintracksService.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/ChaintracksService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAG9D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAMzC,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,KAAK,CAAA;IACZ;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,+BAA+B,CAAC,KAAK,EAAE,KAAK,GAAG,yBAAyB;IAQ/E,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,yBAAyB,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,eAAe,EAAE,OAAO,cAAc,CAAC,CAAA;gBAElD,OAAO,EAAE,yBAAyB;IAgBxC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA4HvD"}
@@ -1,149 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ChaintracksService = void 0;
7
- const Chaintracks_1 = require("./Chaintracks");
8
- const express_1 = __importDefault(require("express"));
9
- const body_parser_1 = __importDefault(require("body-parser"));
10
- const createDefaultNoDbChaintracksOptions_1 = require("./createDefaultNoDbChaintracksOptions");
11
- const Services_1 = require("../../Services");
12
- const sdk_1 = require("../../../sdk");
13
- const utilityHelpers_1 = require("../../../utility/utilityHelpers");
14
- class ChaintracksService {
15
- static createChaintracksServiceOptions(chain) {
16
- const options = {
17
- chain,
18
- routingPrefix: ''
19
- };
20
- return options;
21
- }
22
- constructor(options) {
23
- this.options = { ...options };
24
- this.port = options.port;
25
- this.chain = options.chain;
26
- this.chaintracks = options.chaintracks || new Chaintracks_1.Chaintracks((0, createDefaultNoDbChaintracksOptions_1.createNoDbChaintracksOptions)(this.chain));
27
- this.services = options.services || new Services_1.Services(this.chain);
28
- // Prevent recursion...
29
- this.services.updateFiatExchangeRateServices.remove('ChaintracksService');
30
- if (this.chaintracks.chain !== this.chain || this.services.chain !== this.chain) {
31
- throw new sdk_1.WERR_INVALID_PARAMETER('chain', `All components (chaintracks and services) must be on chain ${this.chain}`);
32
- }
33
- }
34
- async stopJsonRpcServer() {
35
- var _a, _b;
36
- (_a = this.server) === null || _a === void 0 ? void 0 : _a.close();
37
- await ((_b = this.chaintracks) === null || _b === void 0 ? void 0 : _b.destroy());
38
- }
39
- async startJsonRpcServer(port) {
40
- await this.chaintracks.makeAvailable();
41
- port || (port = this.port || 3011);
42
- this.port = port;
43
- const app = (0, express_1.default)();
44
- app.use(body_parser_1.default.json());
45
- // This allows the API to be used when CORS is enforced
46
- app.use((req, res, next) => {
47
- res.header('Access-Control-Allow-Origin', '*');
48
- res.header('Access-Control-Allow-Headers', '*');
49
- res.header('Access-Control-Allow-Methods', '*');
50
- res.header('Access-Control-Expose-Headers', '*');
51
- res.header('Access-Control-Allow-Private-Network', 'true');
52
- if (req.method === 'OPTIONS') {
53
- res.sendStatus(200);
54
- }
55
- else {
56
- next();
57
- }
58
- });
59
- const handleErr = (err, res) => {
60
- res.status(500).json({
61
- status: 'error',
62
- code: 'ERR_INTERNAL',
63
- description: (err === null || err === void 0 ? void 0 : err.message) || 'An internal error has occurred.'
64
- });
65
- };
66
- const appGetVoid = (path, action, noCache = false) => {
67
- app['get'](this.options.routingPrefix + path, async (req, res) => {
68
- if (noCache) {
69
- res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
70
- res.setHeader('Pragma', 'no-cache');
71
- res.setHeader('Expires', '0');
72
- }
73
- try {
74
- console.log(`request ${path}`);
75
- await action(req.query);
76
- res.status(200).json({ status: 'success' });
77
- }
78
- catch (err) {
79
- handleErr(err, res);
80
- }
81
- });
82
- };
83
- const appGet = (path, action, noCache = false) => {
84
- app['get'](this.options.routingPrefix + path, async (req, res) => {
85
- if (noCache) {
86
- res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
87
- res.setHeader('Pragma', 'no-cache');
88
- res.setHeader('Expires', '0');
89
- }
90
- try {
91
- const r = await action(req.query);
92
- console.log('request', path, JSON.stringify(req.query), '->', JSON.stringify(r));
93
- res.status(200).json({ status: 'success', value: r });
94
- }
95
- catch (err) {
96
- console.log(`request ${path} -> error`);
97
- handleErr(err, res);
98
- }
99
- });
100
- };
101
- const appPostVoid = (path, action) => {
102
- app['post'](this.options.routingPrefix + path, async (req, res) => {
103
- try {
104
- console.log(`request POST ${path}`);
105
- await action(req.body);
106
- res.status(200).json({ status: 'success' });
107
- }
108
- catch (err) {
109
- handleErr(err, res);
110
- }
111
- });
112
- };
113
- appGet('/getChain', async () => await this.chaintracks.getChain());
114
- appGet('/getInfo', async (q) => {
115
- if (q.wait)
116
- await (0, utilityHelpers_1.wait)(Number(q.wait));
117
- const r = await this.chaintracks.getInfo();
118
- if (q.wait)
119
- r['wait'] = q.wait;
120
- return r;
121
- }, true);
122
- appGet('/getFiatExchangeRates', async () => {
123
- // update if needed
124
- await this.services.getFiatExchangeRate('GBP');
125
- // return current values
126
- return this.services.options.fiatExchangeRates;
127
- }, true);
128
- appPostVoid('/addHeaderHex', async (header) => {
129
- await this.chaintracks.addHeader(header);
130
- });
131
- appGet('/getPresentHeight', async () => await this.chaintracks.getPresentHeight(), true);
132
- appGet('/findChainTipHashHex', async () => (await this.chaintracks.findChainTipHash()) || '', true);
133
- appGet('/findChainTipHeaderHex', async () => await this.chaintracks.findChainTipHeader(), true);
134
- appGet('/findHeaderHexForHeight', async (q) => {
135
- return await this.chaintracks.findHeaderForHeight(Number(q.height));
136
- });
137
- appGet('/findHeaderHexForBlockHash', async (q) => {
138
- return await this.chaintracks.findLiveHeaderForBlockHash(q.hash);
139
- });
140
- appGet('/getHeaders', async (q) => {
141
- return await this.chaintracks.getHeaders(Number(q.height), Number(q.count));
142
- });
143
- this.server = app.listen(this.port, () => {
144
- console.log(`ChaintracksService listening on port ${this.port}`);
145
- });
146
- }
147
- }
148
- exports.ChaintracksService = ChaintracksService;
149
- //# sourceMappingURL=ChaintracksService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChaintracksService.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/ChaintracksService.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { Chain } from '../../../../sdk';
2
- import { BlockHeader } from '../Api/BlockHeaderApi';
3
- import { BulkIngestorBase } from './BulkIngestorBase';
4
- import { HeightRange, HeightRanges } from '../util/HeightRange';
5
- import { BulkIngestorWhatsOnChainOptions } from './BulkIngestorWhatsOnChainCdn';
6
- import { StopListenerToken } from './WhatsOnChainIngestorWs';
7
- import { WhatsOnChainServices } from './WhatsOnChainServices';
8
- export declare class BulkIngestorWhatsOnChainWs extends BulkIngestorBase {
9
- /**
10
- *
11
- * @param chain
12
- * @param localCachePath defaults to './data/ingest_whatsonchain_headers'
13
- * @returns
14
- */
15
- static createBulkIngestorWhatsOnChainOptions(chain: Chain): BulkIngestorWhatsOnChainOptions;
16
- idleWait: number;
17
- woc: WhatsOnChainServices;
18
- stopOldListenersToken: StopListenerToken;
19
- constructor(options: BulkIngestorWhatsOnChainOptions);
20
- getPresentHeight(): Promise<number | undefined>;
21
- fetchHeaders(before: HeightRanges, fetchRange: HeightRange, bulkRange: HeightRange, priorLiveHeaders: BlockHeader[]): Promise<BlockHeader[]>;
22
- }
23
- //# sourceMappingURL=BulkIngestorWhatsOnChainWs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BulkIngestorWhatsOnChainWs.d.ts","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAA0B,MAAM,0BAA0B,CAAA;AACpF,OAAO,EAAgC,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE3F,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D;;;;;OAKG;IACH,MAAM,CAAC,qCAAqC,CAAC,KAAK,EAAE,KAAK,GAAG,+BAA+B;IAS3F,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,oBAAoB,CAAA;IACzB,qBAAqB,EAAE,iBAAiB,CAAsB;gBAElD,OAAO,EAAE,+BAA+B;IAMrC,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMxD,YAAY,CAChB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,WAAW,EACtB,gBAAgB,EAAE,WAAW,EAAE,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC;CAiC1B"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BulkIngestorWhatsOnChainWs = void 0;
4
- const utilityHelpers_1 = require("../../../../utility/utilityHelpers");
5
- const BulkIngestorBase_1 = require("./BulkIngestorBase");
6
- const WhatsOnChainIngestorWs_1 = require("./WhatsOnChainIngestorWs");
7
- const WhatsOnChainServices_1 = require("./WhatsOnChainServices");
8
- class BulkIngestorWhatsOnChainWs extends BulkIngestorBase_1.BulkIngestorBase {
9
- /**
10
- *
11
- * @param chain
12
- * @param localCachePath defaults to './data/ingest_whatsonchain_headers'
13
- * @returns
14
- */
15
- static createBulkIngestorWhatsOnChainOptions(chain) {
16
- const options = {
17
- ...WhatsOnChainServices_1.WhatsOnChainServices.createWhatsOnChainServicesOptions(chain),
18
- ...BulkIngestorBase_1.BulkIngestorBase.createBulkIngestorBaseOptions(chain),
19
- idleWait: 5000
20
- };
21
- return options;
22
- }
23
- constructor(options) {
24
- super(options);
25
- this.stopOldListenersToken = { stop: undefined };
26
- this.idleWait = options.idleWait || 5000;
27
- this.woc = new WhatsOnChainServices_1.WhatsOnChainServices(options);
28
- }
29
- async getPresentHeight() {
30
- const presentHeight = await this.woc.getChainTipHeight();
31
- (0, utilityHelpers_1.logger)(`presentHeight=${presentHeight}`);
32
- return presentHeight;
33
- }
34
- async fetchHeaders(before, fetchRange, bulkRange, priorLiveHeaders) {
35
- const oldHeaders = [];
36
- const errors = [];
37
- const enqueue = header => {
38
- oldHeaders.push(header);
39
- };
40
- const error = (code, message) => {
41
- errors.push({ code, message, count: errors.length });
42
- return false;
43
- };
44
- const ok = await (0, WhatsOnChainIngestorWs_1.WocHeadersBulkListener)(fetchRange.minHeight, fetchRange.maxHeight, enqueue, error, this.stopOldListenersToken, this.chain, this.idleWait);
45
- let liveHeaders = [];
46
- if (ok) {
47
- liveHeaders = await this.storage().addBulkHeaders(oldHeaders, bulkRange, priorLiveHeaders);
48
- }
49
- if (errors.length > 0) {
50
- const errorMessages = errors.map(e => `(${e.code}) ${e.message} (${e.count})`).join('\n');
51
- (0, utilityHelpers_1.logger)(`Errors during WhatsOnChain ingestion:\n${errorMessages}`);
52
- }
53
- return liveHeaders;
54
- }
55
- }
56
- exports.BulkIngestorWhatsOnChainWs = BulkIngestorWhatsOnChainWs;
57
- //# sourceMappingURL=BulkIngestorWhatsOnChainWs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BulkIngestorWhatsOnChainWs.js","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts"],"names":[],"mappings":";;;AACA,uEAA2D;AAE3D,yDAAqD;AAGrD,qEAAoF;AACpF,iEAA2F;AAE3F,MAAa,0BAA2B,SAAQ,mCAAgB;IAC9D;;;;;OAKG;IACH,MAAM,CAAC,qCAAqC,CAAC,KAAY;QACvD,MAAM,OAAO,GAAoC;YAC/C,GAAG,2CAAoB,CAAC,iCAAiC,CAAC,KAAK,CAAC;YAChE,GAAG,mCAAgB,CAAC,6BAA6B,CAAC,KAAK,CAAC;YACxD,QAAQ,EAAE,IAAI;SACf,CAAA;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAMD,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QAHhB,0BAAqB,GAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAI5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAA;QACxC,IAAI,CAAC,GAAG,GAAG,IAAI,2CAAoB,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAEQ,KAAK,CAAC,gBAAgB;QAC7B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAA;QACxD,IAAA,uBAAM,EAAC,iBAAiB,aAAa,EAAE,CAAC,CAAA;QACxC,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAAoB,EACpB,UAAuB,EACvB,SAAsB,EACtB,gBAA+B;QAE/B,MAAM,UAAU,GAAkB,EAAE,CAAA;QACpC,MAAM,MAAM,GAAuD,EAAE,CAAA;QACrE,MAAM,OAAO,GAAmB,MAAM,CAAC,EAAE;YACvC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC,CAAA;QACD,MAAM,KAAK,GAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YACpD,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,MAAM,EAAE,GAAG,MAAM,IAAA,+CAAsB,EACrC,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,SAAS,EACpB,OAAO,EACP,KAAK,EACL,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CACd,CAAA;QAED,IAAI,WAAW,GAAkB,EAAE,CAAA;QACnC,IAAI,EAAE,EAAE,CAAC;YACP,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;QAC5F,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzF,IAAA,uBAAM,EAAC,0CAA0C,aAAa,EAAE,CAAC,CAAA;QACnE,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;CACF;AAtED,gEAsEC"}
@@ -1,16 +0,0 @@
1
- import { BlockHeader, Chain } from '../../../../sdk';
2
- import { LiveIngestorBase } from './LiveIngestorBase';
3
- import { LiveIngestorWhatsOnChainOptions } from './LiveIngestorWhatsOnChainPoll';
4
- import { StopListenerToken } from './WhatsOnChainIngestorWs';
5
- import { WhatsOnChainServices } from './WhatsOnChainServices';
6
- export declare class LiveIngestorWhatsOnChainWs extends LiveIngestorBase {
7
- static createLiveIngestorWhatsOnChainOptions(chain: Chain): LiveIngestorWhatsOnChainOptions;
8
- idleWait: number;
9
- woc: WhatsOnChainServices;
10
- stopNewListenersToken: StopListenerToken;
11
- constructor(options: LiveIngestorWhatsOnChainOptions);
12
- getHeaderByHash(hash: string): Promise<BlockHeader | undefined>;
13
- startListening(liveHeaders: BlockHeader[]): Promise<void>;
14
- stopListening(): void;
15
- }
16
- //# sourceMappingURL=LiveIngestorWhatsOnChainWs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LiveIngestorWhatsOnChainWs.d.ts","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAA0B,MAAM,0BAA0B,CAAA;AACpF,OAAO,EAAgC,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE3F,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,MAAM,CAAC,qCAAqC,CAAC,KAAK,EAAE,KAAK,GAAG,+BAA+B;IAS3F,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,oBAAoB,CAAA;IACzB,qBAAqB,EAAE,iBAAiB,CAAsB;gBAElD,OAAO,EAAE,+BAA+B;IAM9C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAK/D,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/D,aAAa,IAAI,IAAI;CAGtB"}
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LiveIngestorWhatsOnChainWs = void 0;
4
- const LiveIngestorBase_1 = require("./LiveIngestorBase");
5
- const WhatsOnChainIngestorWs_1 = require("./WhatsOnChainIngestorWs");
6
- const WhatsOnChainServices_1 = require("./WhatsOnChainServices");
7
- class LiveIngestorWhatsOnChainWs extends LiveIngestorBase_1.LiveIngestorBase {
8
- static createLiveIngestorWhatsOnChainOptions(chain) {
9
- const options = {
10
- ...WhatsOnChainServices_1.WhatsOnChainServices.createWhatsOnChainServicesOptions(chain),
11
- ...LiveIngestorBase_1.LiveIngestorBase.createLiveIngestorBaseOptions(chain),
12
- idleWait: 100000
13
- };
14
- return options;
15
- }
16
- constructor(options) {
17
- super(options);
18
- this.stopNewListenersToken = { stop: undefined };
19
- this.idleWait = options.idleWait || 100000;
20
- this.woc = new WhatsOnChainServices_1.WhatsOnChainServices(options);
21
- }
22
- async getHeaderByHash(hash) {
23
- const header = await this.woc.getHeaderByHash(hash);
24
- return header;
25
- }
26
- async startListening(liveHeaders) {
27
- const errors = [];
28
- const enqueue = header => {
29
- liveHeaders.push(header);
30
- };
31
- const error = (code, message) => {
32
- errors.push({ code, message, count: errors.length });
33
- return false;
34
- };
35
- for (;;) {
36
- const ok = await (0, WhatsOnChainIngestorWs_1.WocHeadersLiveListener)(enqueue, error, this.stopNewListenersToken, this.chain, this.idleWait);
37
- if (!ok || errors.length > 0) {
38
- console.log(`WhatsOnChain live ingestor ok=${ok} error count=${errors.length}`);
39
- for (const e of errors)
40
- console.log(`WhatsOnChain error code=${e.code} count=${e.count} message=${e.message}`);
41
- }
42
- if (ok)
43
- break;
44
- errors.length = 0;
45
- }
46
- }
47
- stopListening() {
48
- var _a, _b;
49
- (_b = (_a = this.stopNewListenersToken).stop) === null || _b === void 0 ? void 0 : _b.call(_a);
50
- }
51
- }
52
- exports.LiveIngestorWhatsOnChainWs = LiveIngestorWhatsOnChainWs;
53
- //# sourceMappingURL=LiveIngestorWhatsOnChainWs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LiveIngestorWhatsOnChainWs.js","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts"],"names":[],"mappings":";;;AACA,yDAAqD;AAErD,qEAAoF;AACpF,iEAA2F;AAE3F,MAAa,0BAA2B,SAAQ,mCAAgB;IAC9D,MAAM,CAAC,qCAAqC,CAAC,KAAY;QACvD,MAAM,OAAO,GAAoC;YAC/C,GAAG,2CAAoB,CAAC,iCAAiC,CAAC,KAAK,CAAC;YAChE,GAAG,mCAAgB,CAAC,6BAA6B,CAAC,KAAK,CAAC;YACxD,QAAQ,EAAE,MAAM;SACjB,CAAA;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAMD,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QAHhB,0BAAqB,GAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAI5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;QAC1C,IAAI,CAAC,GAAG,GAAG,IAAI,2CAAoB,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACnD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAA0B;QAC7C,MAAM,MAAM,GAAuD,EAAE,CAAA;QACrE,MAAM,OAAO,GAAmB,MAAM,CAAC,EAAE;YACvC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1B,CAAC,CAAA;QACD,MAAM,KAAK,GAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YACpD,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,SAAS,CAAC;YACR,MAAM,EAAE,GAAG,MAAM,IAAA,+CAAsB,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAE9G,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC/E,KAAK,MAAM,CAAC,IAAI,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YAChH,CAAC;YAED,IAAI,EAAE;gBAAE,MAAK;YAEb,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,aAAa;;QACX,MAAA,MAAA,IAAI,CAAC,qBAAqB,EAAC,IAAI,kDAAI,CAAA;IACrC,CAAC;CACF;AApDD,gEAoDC"}